Update a file inside a JAR in a specific directory with jar command

前端 未结 6 652
礼貌的吻别
礼貌的吻别 2020-12-13 02:35

So I\'ve been looking high and low for an answer to this and obviously haven\'t found a satisfactory answer.

The problem is that I want to update a JAR (or any file

6条回答
  •  时光取名叫无心
    2020-12-13 02:54

    As the accepted answer already pointed out, you can't use neither the zip nor the jar command to insert a specific file on the file system to a specific directory inside the compressed file.

    But there is this workaround, which in a nutshell extracts a specific file inside the compressed file first, you can update it and then put it back into the compressed file:

    1. Extracting a single file :
    Consider a jar with the following contents

    $ jar tvf foo.jar 
     0 Thu Jan 10 00:05:06 IST 2013 META-INF/
    68 Thu Jan 10 00:05:06 IST 2013 META-INF/MANIFEST.MF
     0 Thu Jan 10 00:04:30 IST 2013 x/
     0 Thu Jan 10 00:07:36 IST 2013 x/b/
     9 Thu Jan 10 00:07:36 IST 2013 x/b/hello.txt
     0 Thu Jan 10 00:04:30 IST 2013 x/a/
    

    To extract only hello.txt, you have to give fully qualified path of the file-to-extract. Jar creates appropriate folders too.

    Example :

    $ jar xvf foo.jar x/b/hello.txt
    inflated: x/b/hello.txt
    
    $ tree x/
    x
    └── b
        └── hello.txt  
    1 directory, 1 file
    

    2. Updating a Single File

    1. Modify the extracted file
    2. update the jar using the 'u' flag. Provide the exploded directory root and jar shall update all the path elements under it.

    Example:

    $ jar vfu foo.jar x/
    adding: x/(in = 0) (out= 0)(stored 0%)
    adding: x/b/(in = 0) (out= 0)(stored 0%)
    adding: x/b/hello.txt(in = 23) (out= 11)(deflated 52%)
    

    3. Which version of jar I tried this out with ?

    I used jar bundled with JDK 7 on Fedora 17.


    I have verified all the steps mentioned here. Hope this helps.

提交回复
热议问题