如何在`jav xvf`之后重新打包jar?

时间:2017-09-05 04:02:25

标签: java maven jar

我用

jar xvf my.jar

打开它,我得到了

 BOOT-INF  META-INF   org

META-INF有三个部分:

MANIFEST.MF  maven  spring-configuration-metadata.json

我修改了org中的application.properties,然后我想将它重新打包到my.jar中。

我用过:

jar cvfm my.jar META-INF/MANIFEST.MF BOOT-INF/ org 

但是maven spring-configuration-metadata.json没有打包到my.jar中,那么如何重新打包my.jar?

2 个答案:

答案 0 :(得分:0)

因为您正在使用选项:-f,-m" my.jar"是-f和META-INF / MANIFEST.MF的名称是-m的名称,因此" BOOT-INF / org"是要打包的文件(即未指定META-INF)。 尝试:jar cvfm my.jar META-INF/MANIFEST.MF BOOT-INF META-INF org

答案 1 :(得分:0)

如果您的目标是仅更新META-INF/spring-configuration-metadata.json的内容,则无需提取整个存档。

假设您的app.jar看起来像这样

jar tvf app.jar
     0 Tue Sep 05 07:54:02 CEST 2017 META-INF/
    68 Tue Sep 05 07:54:02 CEST 2017 META-INF/MANIFEST.MF
     0 Tue Sep 05 07:54:02 CEST 2017 org/
     0 Tue Sep 05 07:54:02 CEST 2017 META-INF/maven/
     3 Tue Sep 05 07:54:02 CEST 2017 META-INF/spring-configuration-metadata.json
     0 Tue Sep 05 07:54:02 CEST 2017 BOOT-INF/

仅提取META-INF/spring-configuration-metadata.json

jar xf app.jar META-INF/spring-configuration-metadata.json

提取子目录META-INF中当前目录中的文件。

更新文件

echo bar >> META-INF/spring-configuration-metadata.json

更新app.jar

jar uf app.jar META-INF/spring-configuration-metadata.json

检查app.jar

jar tvf app.jar
     0 Tue Sep 05 07:54:02 CEST 2017 META-INF/
    68 Tue Sep 05 07:54:02 CEST 2017 META-INF/MANIFEST.MF
     0 Tue Sep 05 07:54:02 CEST 2017 org/
     0 Tue Sep 05 07:54:02 CEST 2017 META-INF/maven/
     8 Tue Sep 05 07:54:16 CEST 2017 META-INF/spring-configuration-metadata.json
     0 Tue Sep 05 07:54:02 CEST 2017 BOOT-INF/