【发布时间】:2018-01-26 18:53:45
【问题描述】:
我正在尝试更新rest-xxxx.jar 中的一个jar,这个rest jar 基本上是一个SpringBoot Jar,并且当你解压它时具有BOOT-INF/lib/<dependencies.jars> 的文件夹结构。
现在我想替换这个rest-xxxx.jar中的一个依赖jar,所以我使用了命令:
jar uf rest-xxxx.jar BOOT-INF/lib/new-version-jar-same-name.jar
我是如何在启动过程中遇到错误的:
线程“main”java.lang.IllegalStateException 中的异常:无法打开嵌套条目“BOOT-INF/lib/new-version-jar-same-name.jar”。它已经被压缩并且嵌套的jar文件必须在没有压缩的情况下存储。请检查用于创建可执行 jar 文件的机制
我注意到 jar 命令有一个 0 选项以避免压缩,所以我这样做了:
jar u0f rest-xxxx.jar BOOT-INF/lib/new-version-jar-same-name.jar
但后来我遇到了类似的压缩问题,如下所示:
线程“main”java.lang.IllegalStateException 中的异常:无法打开嵌套条目“BOOT-INF/lib/new-version-jar-same-name.jar/META-INF/MANIFEST.MF”。它已经被压缩并且嵌套的jar文件必须在没有压缩的情况下存储。请检查用于创建可执行 jar 文件的机制
当我需要替换给定springboot jar中的依赖jar时应该怎么做?
请注意:我了解最佳实践是从更新的 pom.xml 构建,我们的限制是我们目前无法获得正确的版本源代码,因此我们正在尝试修补现有的 springboot jar 而不是重建它。
【问题讨论】:
-
我认为
metron-rest-xxxx.jarJAR 本身必须是未压缩的。 -
我要做的是更新
metron-rest-xxx.jar里面的内容,所以不能解压这个jar。我只是将metron-rest-xxx.jar更改为rest-xxxx.jar以避免混淆。 -
为什么不能只更新 pom.xml 中的依赖,重建 Spring Boot 应用?
-
当我需要用给定的springboot jar替换依赖项时我应该怎么做?我会更新项目的build.gradle/pom.xml中的依赖项(即在源代码中),重新编译并重新执行所有单元和集成测试以确保新的依赖项不会破坏任何东西,并使用由官方精心制作的项目构建过程生成的 jar。
-
伙计们,我知道如果我可以从 src 代码重建并将其放入 maven pom.xml 中,这将更容易。但我遇到的问题是,现在我只有一个需要修补的 jar 文件,所以你可以谈谈最佳实践,但我需要修补这个 jar。
标签: java spring-boot jar package