我正在创建一个基于tomcat / jsp的WAR spring boot 2.0.4可执行文件,当仅使用bootWar gradle目标时,效果很好。但是,现在我想加载本地外部JAR,而WarLauncher不支持此操作(是否有原因?)。所以我通过以下方式切换到PropertiesLauncher:
bootWar {
enabled = true
manifest {
attributes 'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher'
}
}
现在,在生成的战争文件中查找,清单中的一切看起来都很好,如下所示:
Start-Class: com.mypackage.Application
Main-Class: org.springframework.boot.loader.PropertiesLauncher
现在,我试图找出合适的命令行参数来启动该程序,这是一个反复试验的尝试,但这使我几乎走到了终点:
java -Dloader.path = WEB-INF / lib提供的,WEB-INF / lib,WEB-INF / classes -jar myapplication-4.0.0.war
所以我基本上看了WarLauncher并尝试通过loader.path值重新创建类路径,而没有添加第3方jar,因为首先我只想启动我的应用程序。
我的应用程序加载正常。
现在,我想在我的第3方jars所在的位置添加一个“本地”路径。我以为我可以做到:
java -Dloader.path = WEB-INF / lib提供的,WEB-INF / lib,WEB-INF / classes,jar:file:lib -jar myapplication-4.0.0.war
因此添加一个 jar:file:lib ,这应该表示我的可运行WAR旁边的“ lib”文件夹。但这不起作用。同样,仅将“,lib”添加到loader.path也不起作用。
唯一有效的方法是添加“ jar:file:/ foo / bar / lib”之类的完整路径,但是我真的很想让它相对于当前可运行的WAR文件夹。
有人可以告诉我如何定义扫描Jars的相对本地文件夹吗?
我希望我可以帮助其他在使用PropertiesLauncher时遇到问题并与可运行的WAR文件结合在一起的人,因为它并不是真正的简单易懂,并且除了本文之外没有太多的文档资料 https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html
答案 0 :(得分:0)
回答我自己的问题,但这可能会有所帮助,因为官方文档不够好。
如果要包括已定义的JAR文件,可以使用:
-Dloader.path=file:/myfolder/my.jar
如果要包括一个有多个罐子的整个导演,可以执行以下操作:
-Dloader.path=file:/myfolder/
(您可以使用file:myfolder使文件夹相对于WAR相对简单)
其他变量,例如从JAR内部读取,可以通过在以下位置读取代码来获得 https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java
真正有用的是调试标志:
-Dloader.path=file:/myfolder/ -Dloader.debug=true
您将获得有关PropertiesLauncher的类加载问题的system.outs。
我真的很想看到一个-Dloader.schema=war
标志,该标志采用WAR布局而不是JAR布局。这样,只需在WAR中添加自己的路径,而无需添加文件夹。