【发布时间】:2015-09-13 15:04:14
【问题描述】:
我想为我的 Spring-Boot 应用程序添加一个备用入口点。我宁愿把它当作一个肥罐。这可能吗?
根据他们的documentation,属性loader.main指定要启动的主类的名称。
我尝试了java -jar MyJar.jar --loader.main=com.mycompany.AlternateMain,但我的 pom.xml 中指定的 start-class 仍在运行(如果我从 pom.xml 中删除它,那么我会在打包过程中出错)。
或者,我尝试了java -cp MyJar.jar com.mycompany.AlternateMain,但我不知道将所有嵌套 jar 添加到类路径的好方法。
有什么建议吗?
编辑:这是我使用的解决方案
按照 jst 的建议,我将启动器更改为使用 PropertiesLauncher。我通过修改我的 spring-boot-maven-plugin 的配置来做到这一点。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${start-class}</mainClass>
<layout>ZIP</layout>
...
<layout>ZIP</layout>triggers Spring Boot to use the PropertiesLauncher。
我创建了我的 fat jar(mvn 包),然后像这样调用了备用 main:
java -jar -Dloader.main=com.mycompany.AlternateMain MyJar.jar
感谢您的帮助!
【问题讨论】:
-
Spring Boot 只是使用 JAR 的 Manifest 来指定主类和类路径。所以我认为这里真正的问题是可执行 JAR 中是否可以有多个主类?这个问题也在这里问/回答:stackoverflow.com/q/3976514/953327
-
你打算用这个完成什么?你想在 Spring Boot 中创建多个应用程序吗?
-
@FGreg 我可以使用我记下的第二个命令访问备用主命令,该命令与您链接到的 SO 线程中的答案相匹配。为了成功使用它,我必须弄清楚如何将嵌套的 jar 添加到类路径中。
-
@Makoto 我不想用这个创建多个应用程序。这实际上是我现在正在做的概念验证,但我过去出于各种原因使用了多个入口点
标签: java spring jar spring-boot