java - 带有 Spring Boot 2 的 PropertiesLauncher(并运行 WAR 存档)
问题描述
我正在创建一个基于 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-provided,WEB-INF/lib,WEB-INF/classes -jar myapplication-4.0.0.war
所以我基本上查看了 WarLauncher 并尝试通过 loader.path 值重新创建类路径,而不添加 3rd 方 jar,因为首先我只想启动我的应用程序。
我的应用程序的加载看起来不错。
现在我想在我的 3rd 方 jar 所在的位置添加一个“本地”路径。我以为我可以这样做:
java -Dloader.path=WEB-INF/lib-provided,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 文件夹。
有人能告诉我如何定义扫描罐子的相对本地文件夹吗?
我希望我能帮助其他人与可运行的 WAR 文件结合使用 PropertiesLauncher,因为它并不是很简单,除了 https://docs.spring.io/spring-boot/docs/current/reference/html/之外没有太多文档可执行jar.html
解决方案
回答我自己的问题,但这可能会有所帮助,因为官方文档不是很好。
如果要包含已定义的 JAR 文件,可以使用:
-Dloader.path=file:/myfolder/my.jar
如果你想包含一个带有多个 jar 的整个导演,你可以这样做:
-Dloader.path=file:/myfolder/
(您可以简单地使用 file:myfolder 使文件夹相对于 WAR)
真正有帮助的是调试标志:
-Dloader.path=file:/myfolder/ -Dloader.debug=true
您将获得关于 PropertiesLauncher 的类加载问题的 system.outs。
我真的很想看到一个-Dloader.schema=war
假设 WAR 布局而不是 JAR 布局的标志。这样一来,只需要在 WAR 中添加自己的路径而不是所需的文件夹。
推荐阅读
- voltdb - 为什么在 VoltDB 中发生网络分区时允许脏读?
- python - 在 R 中重新创建 python 机械化脚本
- reactjs - Enzyme Shallow 没有找到 react-bootstrap 组件
- vue.js - 如何使用现有的vue项目找到github
- scala - 有没有办法重置类中的变量并让函数设置它的值?
- spring - Spring-WS 解密正文部分
- html - 将过滤器添加到另一个 SVG 图像内的 SVG 图像
- css - 悬停上的 CSS 以影响另一个容器中的元素(引导卡)
- javascript - 在 JS 中实现析构函数的最佳方法
- sql-server - Webservice 无法检索数据