我在容器中运行SpringBoot的一大组服务上工作。我们构建一个“Spring Boot Jar”并用“java -jar”执行它作为容器中的启动脚本。
我被要求实现一些概念上看起来很简单的东西,但我发现它可能相当粗糙。
需要发生的是,脚本需要检查映射卷中的特定 jar 文件,如果存在,请使用增强的类路径(包括其他 jar)运行Spring启动服务。
我意识到这非常混乱,因为当你用“java -jar”执行一个Spring Boot jar时,你不能只是“扩充类路径”。如果“-jar”在命令行上,它将忽略所有“-cp”选项。
这个简单的事实需要检查对原始jar进行大量内省的可能性,至少获得BOOT-INF/lib jar的完整列表,并构建一个新的类路径字符串,包括所有这些jar以及附加的jar,更不用说BOOT-INF/classes了。相对完整的解决方案需要提取META-INF/MANIFEST。MF文件来获取Start-Class属性。这实际上很难实现。我当然希望我不会找到我需要的任何服务来使用Spring Boot的“idx”来指定jar的类路径顺序。我想我们没有,但我真的不确定。
我想一个更简洁的解决方案可能是让脚本使用zip实用程序来“编辑”jar,为附加jar添加另一个BOOT-INF-lib jar条目。不幸的是,这些容器在只读文件系统中运行,所以没有地方可以写入jar。
我会感谢任何合理的策略,人们可以提出建议。
鉴于您正在处理只读文件系统,使用Spring Boot的属性启动器
可能是您的最佳选择。
使用属性启动器,可以使用 loader.path
系统属性来配置类路径。始终包含 BOOT-INF/
lib 中的引导 INF/
类和 jar,因此加载程序.path
应仅指向其他卷装入的 jar 文件。
您可以将Spring Boot配置为构建一个使用Gradle和Maven属性启动器的jar。
任何人都可以使用带有Spring bootJar任务和以下版本的gradle创建可执行和不可提取的jar: Spring boot 2.6.7(2.6. x), gradle 6.9.0, Spring Cloud 2021.0.0,Java版本8 以下是可能有所帮助的参考资料: Spring Boot·格拉德:如何构建可执行的jar 其他参考资料将很有帮助。 我无法创建不可提取和可执行的jar。
问题内容: 插件xyz应该在Java项目之上运行并生成一些Java代码。在构建和运行时,此代码将需要插件jar中可用的类。因此,插件的jar(或安装目录)应出现在构建类路径中。 插件如何才能以可移植的方式找出其自己的jar /安装目录的确切路径,或者为此找到某个关联插件的jar的路径? 背景是我要创建一个向导,用户可以运行该向导以在项目上启用xyz性质。应该为用户提供在哪里可以找到所需运行时功能的
我试图在spring boot应用程序中构建shaded jar,但是遇到了一些问题。我不知道我做错了什么。我还阅读了以下链接,但没有运气maven-shade-plugin错误:无法在org . Apache . maven . plugins . shade . resource . manifestresourceformer中找到“resource”的setter、adder或field
知道为什么吗 工作,但是双击罐子会给一个 错误?清单被正确放置,双击直到最近还在工作,但突然之间它给出了这个错误。我不确定我做了什么改变。 编辑: 我用来创建jar的命令是(在cmd中): Main是包文件的一部分。
如何从所有子项目中收集资源,并将它们复制到spring boot胖jar根路径中。假设我有3个项目 child-project-C同时依赖于A和B。启动重新打包对项目A和B是禁用的,对项目C是启用的,所以当我编译最终的jar时。它包括AAA。txt位于jar的根路径中,因为它来自child-project-C类路径,而不是abc。txt和def。txt进入project-A和project-B的j
有什么不同?我可以在联机主机上部署吗?