构建后将jar添加到springboot jar类路径的java策略
我处理一大组在容器中运行SpringBoot的服务。我们构建了一个“SpringBootJAR”,并用“java-Jar…”执行它作为容器中的开始脚本
我被要求实现一些在概念上似乎很简单的东西,但我发现它可能相当粗糙
需要做的是,脚本需要检查映射卷中的特定jar文件,如果存在,则使用扩展类路径(包括附加jar)运行spring引导服务
我意识到这相当混乱,因为当您使用“java-jar”执行Spring引导jar时,您不能仅仅“扩展类路径”。如果命令行上有“-jar”,它将忽略所有“-cp”选项
这一简单的事实要求检查对原始jar进行大量内省的可能性,至少获得完整的BOOT-INF/lib jar列表,并构建一个新的类路径字符串,包括所有这些jar以及其他jar,更不用说BOOT-INF/CLASS了。一个相对完整的解决方案需要提取META-INF/MANIFEST。MF文件以获取开始类属性。这一切都是相当混乱的实现为真正的。我当然希望我没有找到任何需要使用Spring Boot“idx”来指定JAR类路径顺序的服务。我想我们没有,但我真的不确定
我认为一个更干净的解决方案可能是让脚本使用zip实用程序“编辑”jar,为额外的jar添加另一个引导INF lib jar条目。不幸的是,这些容器在只读文件系统中运行,因此我无法将jar写入其中
如果有人能提出合理的策略,我将不胜感激
# 1 楼答案
考虑到您正在处理一个只读文件系统,使用Spring Boot的^{} 可能是最好的选择
通过properties启动器,您可以使用
loader.path
系统属性来配置类路径BOOT-INF/classes
和BOOT-INF/lib
中的jar总是包含在内,所以loader.path
应该只指向附加的卷装入jar文件您可以将Spring Boot配置为构建一个jar,该jar使用带有Gradle和Maven的属性启动器