So I need to remove a file from a jar / war file.
I was hoping there was something like “jar -d myjar.jar file_I_donot_need.txt”
But right now the only way I can see of doing this from my Linux command line (without using WinRAR/Winzip or linux equivalent) is to
- Do “jar -xvf” and extract the
complete Jar file
- Remove the file(s) I don’t need
- Rejar the jar file using “jar -cvf”
Please tell me there is a shorter way?
zip -d file.jar unwanted_file.txt
jar is just a zip file after all. Definitely much faster than uncompressing/recompressing.
In Java you can copy all the entries of a jar except the one you want to delete. i.e. you have to make a copy but don’t need to create the individual files.
You can do this by
- creating a new jar.
- iterating though the Jar you have
- copy the entry from one jar to the other, skipping any files you want.
- close and replace the orginal jar if you want.
In case you want to delete file in order to unsign signed jar, you can probably just make the .RSA file zero-sized. This can be accomplished with just
jar u. See https://stackoverflow.com/a/24678645/653539 . (Worked for me, though I admit it’s hack.)