我正在使用 Spring Boot gradle 插件 ( org.springframework.boot
) 来生成“一个”jar。当我跑步时它运行良好java -jar app.jar
- 完全符合预期。但是,该应用程序应该通过 JNI 使用 Apache Commons Daemon 作为守护程序运行。这个应用程序的早期版本是建立在自制框架之上的,我在主类中有方法,我可以在守护进程配置中指定start
。shutdown
我看到 Main-Class 变成org.springframework.boot.loader.JarLauncher
了,它没有在它的任何地方实现start
和shutdown
方法,或者它的超类。有一种launch
方法,但我认为这只能用于运行 jar java -jar
。
这是由 gradle 插件生成的清单文件(已编辑)和反编译的一个 jar 的内容:
Manifest-Version: 1.0
Start-Class: com.company.myapp.Application
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 1.5.6.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
那么我的问题是:我可以配置这个 gradle 插件来添加 JNI 钩子方法,以便它们正确运行我的应用程序的主类吗?我知道有一个用于 Gradle 的 Shadow 插件来制作“uber”jar,我也可以放弃创建“uber”jar 并在lib/
目录中分发(它是一个桌面应用程序)。但是,如果 Spring Boot 开发人员考虑过它并且有办法做到这一点,我宁愿使用它。