【问题标题】:Spring Boot & WinRun4J for Windows Service JAR: Service launch class outside BOOT-INF folder用于 Windows 服务 JAR 的 Spring Boot 和 WinRun4J:BOOT-INF 文件夹外的服务启动类
【发布时间】:2017-04-17 20:14:15
【问题描述】:

我想使用WinRun4J 将 Spring Boot 应用程序作为 Windows 服务运行。它不起作用,因为 WinRun4J 无法找到主类。我注意到这是因为 spring-boot-maven-plugin 在 BOOT-INF 文件夹中收集了源代码,它无法访问那里的类。这是错误跟踪:

[info] Registering natives for Native class
[info] Registering natives for FFI class
 [err] Could not find service class
 [err] Failed to initialise service: 1
java.lang.NoClassDefFoundError: SpringBootLauncherService
Caused by: java.lang.ClassNotFoundException: SpringBootLauncherService
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)

有没有办法在 BOOT-INF 文件夹之外生成带有所需类的 Spring Boot 可执行 jar? 或者也许 您知道使用 Spring Boot 和 WinRun4J 的完整示例吗?

spring-boot-maven-plugin生成的jar结构如下:

myapp-0.0.1-SNAPSHOT.jar
|--- org: Spring Boot Loader classes
|--- META-INF: maven/ & MANIFEST-MF
|--- BOOT-INF: lib/ & classes/

我相信我需要这样的东西:

myapp-0.0.1-SNAPSHOT.jar
|--- org: Spring Boot Loader classes
|--- META-INF: maven/ & MANIFEST-MF
|--- BOOT-INF: lib/ & classes/
|--- SpringBootLauncherService.class

我将不胜感激。

【问题讨论】:

    标签: maven spring-boot winrun4j


    【解决方案1】:

    我能够使其工作如下。

    • 我使用 bootRepackage 分类器属性强制 Spring Boot 创建 2 个 JAR:一个具有 Spring Boot 结构,另一个是可用于其他目的的普通 JAR,例如与 WinRun4J 集成。这在Use a Spring Boot application as a dependency 中得到了很好的解释
    • 我从可执行 JAR 中提取了 lib,并将该文件夹添加到 WinRun4J 的 INI 文件中的类路径中。 classpath.1=the-springboot-app.jar classpath.2=./lib/*
    • 还是在 INI 文件中,我添加了vmarg.1=-Dloader.main=the.springboot.app.Application,以便使用 SpringBoot PropertiesLaucher 的 SpringBootLauncherService 类可以解析加载器类。
    • service.class 在INI 中设置为service.class=the.springboot.app.SpringBootLauncherService

    【讨论】:

    • 话虽如此,我也试过winsw,发现它更简单。它以与我在命令行中相同的方式启动 Spring Boot 应用程序,使用java -jar my-app.jar。我建议您将其视为 WinRun4J 的一个非常好的替代品。见docs.spring.io/spring-boot/docs/current/reference/html/…
    • 您对winsw 的看法完全正确。就像我的应用程序的魅力一样 - 谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 2014-07-30
    • 2022-07-26
    • 2018-07-21
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    相关资源
    最近更新 更多