Usando o Terminal para abrir um arquivo dentro de um arquivo jar?

6

Como posso abrir e ver dentro de um arquivo dentro de um arquivo jar dentro do Terminal?

Eu posso usar menos para imprimir todos os arquivos dentro do arquivo jar, mas como posso abrir esses arquivos?

    
por Kurru 10.01.2013 / 06:06

4 respostas

5

Pessoalmente, uso jar porque me parece mais natural e permite outras operações, como atualizar conteúdos também. Aqui estão os comandos de leitura:

Listar conteúdo

jar tf myjar.jar

Extraia o conteúdo para pwd

jar xf myjar.jar

Extraia um arquivo específico, criando dirs conforme necessário

jar xf myjar.jar /foo/bar.class

Extrair o bytecode em si não costuma ser muito útil. Para fazer sentido, você precisa descompilar em algo legível.

Não há muitos bons decompiladores java para escolher. Eu costumo usar JD-GUI , porque é rápido e faz o que eu preciso. Frustrantemente, sua funcionalidade de pesquisa em vários arquivos nunca funciona para mim (note que Ctrl + F procura na página é bom). Esta não é uma grande perda; você pode obtê-lo para despejar todas as fontes para o disco com Ctrl + Alt + S para leitura com grep / vim / Eclipse etc.

Eu instalei assim:

wget http://jd.benow.ca/jd-gui/downloads/jd-gui-0.3.5.linux.i686.tar.gz
tar xzf jd-gui-0.3.5.linux.i686.tar.gz
sudo mv jd-gui /usr/local/bin/
sudo chown root:root /usr/local/bin/jd-gui
sudo chmod 755 /usr/local/bin/jd-gui

Usar algo assim:

jd-gui myjar.jar
Ctrl+Alt+S; pick your path & save
Alt+F4
jar xf <path>/myjar.src.zip 

Note, entretanto, que o JD-GUI não possui interface CLI. Se você souber de um bom decompilador CLI, eu ficaria muito interessado em ouvi-lo (existe JAD, mas AFAIK que suporta apenas Java & lt; 1.5).

    
por IlluminAce 13.01.2013 / 04:31
4

Usando o unzip, você pode enviar um arquivo do arquivo para o stdout e depois para outra coisa para lê-lo, como:

unzip -p /path/to/some.jar path/to/file/inside/jar | less

Por padrão, a descompactação de memória não é instalada por padrão, portanto, talvez seja necessário:

sudo apt-get install unzip

Jeff

    
por Jeff 10.01.2013 / 06:12
1

arquivos jar são realmente apenas arquivos zip que você pode testar fazendo isso.

file foo.jar

para listar os arquivos que você pode fazer simples.

unzip -l foo.jar

Para acessar os arquivos, basta descompactar o arquivo com

unzip foo.jar

Se você quiser extrair apenas um arquivo, acrescente os arquivos após

unzip foo.jar some/path/in/jar/bar.class

Certifique-se de usar o caminho completo de -l. E tenha em mente que ele criará o mesmo caminho localmente.

    
por strings 10.01.2013 / 06:16
1

(Sem pontos de repetição, então tem que responder para responder aos comentários do @Kurro)

unzip (-p | -c) <jar-file> <file-in-jar>

As opções -p e -c extraem o arquivo para a saída padrão; -c fornece 2 linhas extras de dados no início (qual arquivo JAR e qual arquivo dentro do arquivo).

Achei isso extremamente conveniente para ler o arquivo de manifesto ou os arquivos .xml. Para os arquivos .class compilados, isso é inútil, mas seu amigo aqui é javap :

javap -classpath <jar-file> <fully.qualified.class.name>    # without the .class suffix

Algumas opções úteis são: -c (decompilar para o Java Assembly), -private para mostrar também campos privados e -verbose para muitas informações extras. Se for um arquivo grande, talvez você queira enviar a saída por meio de less .

    
por Menachem 09.09.2015 / 01:33