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

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.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)