Existe uma maneira rápida de excluir um arquivo de um Jar / war sem precisar extrair o jar e recriá-lo?

105

Portanto, preciso remover um arquivo de um arquivo jar / war. Eu esperava que houvesse algo como "jar -d myjar.jar file_I_donot_need.txt"

Mas agora a única maneira que posso ver de fazer isso na minha linha de comando do Linux (sem usar WinRAR / Winzip ou equivalente do Linux) é

  • Execute "jar -xvf" e extraia o
    arquivo Jar completo
  • Remova o (s) arquivo (s) de que não preciso
  • Rejar o arquivo jar usando "jar -cvf"

Por favor, diga-me que existe um caminho mais curto?

kellyfj
fonte
3
Como um "jar" é apenas um arquivo zip, suspeito que você terá mais sorte no superuser.com .
Kirk Woll
Você também pode tentar escrever um script de shell para envolver todo o processo. Algo como./myscript.sh -d <list of files>
Favonius

Respostas:

202
zip -d file.jar unwanted_file.txt

jar é apenas um arquivo zip, afinal. Definitivamente, muito mais rápido do que descompactar / recomprimir.

martona
fonte
3
Mais frequentemente, tenho o p7zip instalado em vez de zipe, neste caso, é importante especificar o formato do arquivo:7z d -tzip file.jar dir/unwanted_file.txt
lapo
@martona Estou recebendo o seguinte erro: erro de zip: estrutura do arquivo Zip
Goaler444
@ Goaler444 Eu tive o mesmo erro, mas usar 7z como o lapo sugeriu funcionou para mim.
yby
Como excluir um arquivo de um jarro filho ou jarro grande?
Tom
5
Se você deseja excluir uma pasta do jar, certifique-se de que haja uma barra no final da pasta indesejada:zip -d file.jar unwanted_folder/
Martin Woolstenhulme
1

Em Java, você pode copiar todas as entradas de um jar, exceto aquela que deseja excluir. ou seja, você precisa fazer uma cópia, mas não precisa criar os arquivos individuais.

Você pode fazer isso por

  • criando uma nova jarra.
  • iterando através do Jar que você tem
  • copie a entrada de um jar para outro, pulando todos os arquivos que desejar.
  • feche e substitua o frasco original, se desejar.
Peter Lawrey
fonte
0

No caso de desejar excluir o arquivo para cancelar a assinatura do jar, você provavelmente pode fazer com que o arquivo .RSA tenha o tamanho zero. Isso pode ser feito com apenas jar u. Consulte https://stackoverflow.com/a/24678645/653539 . (Funcionou para mim, embora eu admita que é um hack.)

Tomáš Záluský
fonte