¿Existe una forma rápida de eliminar un archivo de un jar / war sin tener que extraer el jar y volver a crearlo?

105

Entonces necesito eliminar un archivo de un archivo jar / war. Esperaba que hubiera algo como "jar -d myjar.jar file_I_donot_need.txt"

Pero en este momento, la única forma que puedo ver de hacer esto desde mi línea de comandos de Linux (sin usar WinRAR / Winzip o el equivalente de Linux) es

  • Haga "jar -xvf" y extraiga el
    archivo Jar completo
  • Eliminar los archivos que no necesito
  • Rejar el archivo jar usando "jar -cvf"

Por favor, dime que hay un camino más corto.

Kellyfj
fuente
3
Dado que un "jar" es solo un archivo zip, sospecho que tendrás más suerte en superuser.com .
Kirk Woll
También puede intentar escribir un script de shell para envolver todo el proceso. Algo como./myscript.sh -d <list of files>
Favonius

Respuestas:

202
zip -d file.jar unwanted_file.txt

jar es solo un archivo zip después de todo. Definitivamente mucho más rápido que descomprimir / recomprimir.

martona
fuente
3
Con más frecuencia tengo instalado p7zip en lugar de zipy, en este caso, es importante especificar el formato de archivo:7z d -tzip file.jar dir/unwanted_file.txt
lapo
@martona Recibo el siguiente error: error zip: estructura de archivo Zip
Goaler444
@ Goaler444 Tuve el mismo error, pero usar 7z como sugirió lapo funcionó para mí.
sobrevuelo
¿Cómo eliminar un archivo de un frasco secundario o un frasco nieto?
Tom
5
Si desea eliminar una carpeta en el frasco, asegúrese de que haya una barra diagonal al final de la carpeta no deseada:zip -d file.jar unwanted_folder/
Martin Woolstenhulme
1

En Java, puede copiar todas las entradas de un archivo jar excepto la que desea eliminar. es decir, tiene que hacer una copia pero no necesita crear los archivos individuales.

Puedes hacer esto por

  • creando un nuevo frasco.
  • iterando a través del tarro que tienes
  • copie la entrada de un frasco a otro, omitiendo los archivos que desee.
  • cierre y reemplace el frasco original si lo desea.
Peter Lawrey
fuente
0

En caso de que desee eliminar el archivo para cancelar la firma del jar firmado, probablemente pueda hacer que el archivo .RSA sea de tamaño cero. Esto se puede lograr con solo jar u. Consulte https://stackoverflow.com/a/24678645/653539 . (Funcionó para mí, aunque admito que es un truco).

Tomáš Záluský
fuente