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
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
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.