Visualizando o Conteúdo de um Arquivo .jar

226

Qual seria a maneira mais fácil de visualizar classes, métodos, propriedades etc. dentro de um arquivo jar? Estou procurando algo equivalente ao muito útil Lutz Roeder .NET Reflector - para Java

Dani
fonte
12
Por que você não aceita a resposta?
Sanghyun Lee
4
@HughLee O cara que perguntou isso perguntou há 8 anos . É por isso que é preciso haver uma aceitação automática após uma resposta atinge 100 upvotes IMO
Kolob Canyon
@KolobCanyon verdade, mas eles resposta mais votados foi apresentado no mesmo dia como este foi perguntado
Pranav A.
1
A resposta vem: https://superuser.com/a/808938/1045397 Você pode fazer isso com o vim vim file_name.jar
byte mamba

Respostas:

280

Usando o JDK, jar -tflistará os arquivos no jar. javapfornecerá mais detalhes de um arquivo de classe específico.

Tom Hawtin - linha de orientação
fonte
3
@salvob Você não precisa do hífen, pois precisa tardas opções obrigatórias.
Tom Hawtin - defina
2
Para sua informação, pode ser necessário adicionar C:\Program Files\Java\jdk<version>\binao seu sistema ou variável de ambiente PATH do usuário antes de poder usá-lo jarcomo um comando do sistema. (Onde <versão> é o número da versão jdk-build check-in. C:\Program Files\Java)
Tezra
1
exemplo javap: javap -classpath test.jar com.yourpackage.HelloWorld
mPrinC 22/17/17
para ver o conteúdo de um arquivos não-classe (como manifesto) que você gostaria de fazer algo como isto: tar -xOzf test.jarjar tf test.jar | grep MANIFEST
mPrinC
55

Normalmente, eu os abro com o 7-Zip ... Permite pelo menos ver pacotes, classes e recursos.
Se eu precisar ver métodos ou campos, usaria o Jad, mas é claro, é melhor confiar no (bom) JavaDoc ...

Agora, em algum lugar do SO foram mencionados alguns plug-ins do Eclipse, para descobrir em qual arquivo jar uma classe está localizada, talvez eles possam fazer mais (isto é, o que você solicitou).

[EDIT] Referência ao thread SO. Não é o que é solicitado, mas de alguma forma relacionado, portanto útil: Java: Como sei qual arquivo jar usar com um nome de classe?

PhiLho
fonte
O link para o site Jad foi removido porque o URL está estacionado. Ele ainda pode ser encontrado em web.archive.org/web/20080106184313/http://www.kpdus.com/…, mas Jad está desatualizado hoje, de qualquer maneira.
PhiLho 11/11
35

O que eu uso pessoalmente é JD-GUI. É um 'descompilador' gratuito, pois permite ver o código-fonte, classes e objetos nas classes, além de ver a estrutura do arquivo em um menu em árvore à esquerda. No entanto, ele não permite modificar as classes diretamente.

Site da JD-GUI: http://jd.benow.ca/

Azulflame
fonte
Isso funciona em várias plataformas, enquanto o 7-Zip mencionado em outra resposta é específico do Windows.
Brad Cupit 02/12/2015
Eu usei o Archive Utility no OS X, funcionou bem. A maioria dos utilitários (des) zip deve funcionar, independentemente da plataforma.
Greenonline
23

Caso alguém ainda não saiba disso, um arquivo JAR é apenas um arquivo ZIP que contém as classes, recursos, etc. do programa e alguns metadados. Você pode extrair um para ver como ele é montado.

Portanto, eu estou usando o unzipcomando que é fácil de lembrar e usar.

unzip -l <jar-file-name>.jar

Por exemplo, se você tiver um arquivo jar com nome test.jar, unzip -l test.jarlistará todo o conteúdo do arquivo jar.

Enquanto todas as outras respostas são ótimas, mas na maioria delas, você teria que usar algum software como 7 zipou JDKalguma outra ferramenta eclipse, enquanto isso não exige que você tenha nenhum desses grandes problemas de hardware, e isso vem por padrão no linux e mac, por isso é muito leve e prático de usar .

Você também pode usar zipinfo <your jar file>. se o seu sistema operacional suportar isso.

Opster Elasticsearch Ninja
fonte
1
@ Boop obrigado pela sugestão. irá adicioná-lo à minha resposta
Opster Elasticsearch Ninja
1
Se os suportes de arquivo explorador zip, renomeando o frasco para .zip trabalha também (por exemplo, no Windows)
Rhayene
16

Nomes de métodos, campos etc.

Ao adicionar um jar a um projeto em um IDE, geralmente você pode ver métodos e nomes de campos, mas não a implementação detalhada. O NetBeans pode fazer isso, provavelmente Eclipse, IntelliJ, etc. Você pode navegar na estrutura do jar diretamente no IDE.

Apenas o conteúdo

Para algo como visualizar o conteúdo, você pode usar:

  • jar tvf jarfile.jar
  • winzip ou qualquer ferramenta zip

O código fonte

Para acessar o código-fonte, você usaria um descompilador, como o JAD ou um de seus front-ends ou outro descompilador. Se o código estiver ofuscado, então ...

Comunidade
fonte
10

Estendendo a resposta de Tom Hawtin, você pode canalizar a listagem para filtrar a classe ou os arquivos desejados:

jar tf my-fat-jar-file.jar | grep filename

Isso deve funcionar no bash / zsh e similares, ou no esmac do emacs.

Informações adicionais: https://docs.oracle.com/javase/tutorial/deployment/jar/view.html

Jose Miguel
fonte
7
jar -tvf file_name.jar

acima imprimirá apenas os nomes dos arquivos .

Para visualizar o conteúdo dos arquivos, você pode extrair os arquivos em uma pasta :

jar -xvf file_name.jar

isso descompactará o arquivo jar e colocará o conteúdo no mesmo diretório em que você o executa.

Ou, no Windows, renomeie o arquivo .jar para .zip e descompacte para extrair e exibir o conteúdo do arquivo jar. Como jar é internamente um arquivo zip.

Anil Kapoor
fonte
6

Use o WinRar . Ele abrirá a estrutura de pastas para você de maneira intacta. Também permite a edição no arquivo morto, preservando os caminhos.

Afinal, um arquivo JAR é apenas um arquivo ZIP.

MN
fonte
6

Se você quiser ver o que há dentro, simplesmente renomeie como primeira opção abaixo.

  1. F2 & Rename to jarfile.zip // Use qualquer descompactador ...

  2. jar tvf jarfile.jar

  3. jar tf jarfile.jar

Algum cara de Java
fonte
5

Se bem entendi, você quer ver não apenas classes, mas também métodos, propriedades e assim por diante. A única ferramenta que eu sei que pode fazer isso é o Eclipse - se você adicionar um jar ao caminho de classe do projeto, poderá navegar nas classes com métodos e propriedades usando o habitual explorador de pacotes.

De qualquer forma, é uma boa ideia para uma boa ferramenta Java independente

Yoni Roit
fonte
Observe que o jar precisa estar na pasta "Bibliotecas referenciadas", não apenas em "libs". E no caso da biblioteca Apache Commons, você não navega no source.jar, navega no original e depois anexa a fonte quando o Eclipse solicitar.
achou
4

Jad é desajeitado e não é mais mantido. Eu mudei para o "Java Decompiler" , que tem uma interface de usuário elegante e suporte para novos recursos de linguagem.

Todo descompilador que usei, no entanto, é executado no código e não é descompilado com êxito. Para esses, ajuda a entender o código de byte Java desmontado produzido pela ferramenta JDK padrão, javap .

erickson
fonte
3

Bem, um arquivo jar é apenas um arquivo zip; portanto, se você o descompactar (com o seu utilitário de descompactação favorito), todos os arquivos serão inseridos.

Se você quiser olhar dentro dos arquivos de classe para ver os métodos, precisará de uma ferramenta para isso. Como PhiLho menciona, o Eclipse é capaz de fazer isso (por padrão), e eu acho que a maioria dos Java IDEs é capaz disso.

Jeroen Heijmans
fonte
3

No Eclipse 3.4, faça

  1. Arraste o arquivo jar em questão para um projeto Java. Uma cópia do arquivo jar é exibida.
  2. Clique com o botão direito no arquivo jar e escolha "Build Path" -> "Add to Build Path".
  3. O arquivo jar é movido para o nó "Bibliotecas referenciadas", onde pode ser aberto e navegado no painel Explorador de Projetos.

Se a visualização do código fonte também for um problema, abra uma nova pergunta.

Para navegação no nível do arquivo Jar (como um arquivo zip), uso o 7zip, que funciona muito bem, e permite visualizar e editar entradas, o que é ótimo para solucionar problemas.

Thorbjørn Ravn Andersen
fonte
3

Uma maneira de fazer isso é abrir a perspectiva no "Package Explorer". Fazendo isso, você pode ver a estrutura do seu jar com detalhes da classe. Para isso, verifique a pasta da biblioteca em seu projeto usando o explorador de pacotes.

Janela >> Mostrar Exibição >> Outros >> Java >> Explorador de Pacotes

Outra maneira é que você pode usar o JarPlug como um plug-in do eclipse. Isso funciona em eclipse / springsource

http://jar-plug.sourceforge.net/

Ziya
fonte
3

Se você estiver no Windows e usando o PowerShell e estiver procurando um arquivo em um jar, você pode:

jar -tf .\[JAR_NAME] | where {$_ -match "[FILENAME]"}
James
fonte
2

Você pode abri-los com a maioria dos utilitários de descompactação atualmente e, em seguida, obter algo como DJ Java Decompiler, se quiser visualizar a fonte.

John T
fonte
2

Meu requisito era exibir o conteúdo de um arquivo (como um arquivo de propriedades) dentro do jar, sem realmente extraí-lo. Se alguém alcançou esse segmento como eu, tente este comando -

unzip -p myjar.jar myfile.txt

Isto funcionou bem para mim!

Subhashree Pradhan
fonte
2

Eu acho que o Java Decomplier é a melhor opção que você pode baixar aqui: http://jd.benow.ca/ Pré-visualização

Ziad Alzarka
fonte
1

Eu prefiro o JAR Browser , ele tem uma interface simples na qual você pode procurar vários JARs e procurar uma classe específica em vários JARs simultaneamente.

audiodude
fonte
1

Eclipse 3.4 JDT

Não é o caminho mais rápido, porque você deve arrastá-lo para o seu eclipse primeiro. Mas você terá a navegação na classe java completa, mesmo com a descompilação ativada.

Dennis C
fonte
1

Eu configurei a ação padrão no Windows para "Abrir com o WinZip". Isso facilita o gerenciamento de JARs como arquivos. Você pode até adicionar / remover arquivos manualmente.

Chris Nava
fonte
1

Este Jar Explorer é bom o suficiente.
Suporta três tipos de decompilador: JD, Procyon e Fernflower.
Permite pesquisar arquivos e duplicatas em qualquer arquivo java.
Além disso, o usuário pode modificar jar por arquivos de D&D e editar alguns arquivos que não são de classe. insira a descrição da imagem aqui insira a descrição da imagem aqui

user12377884
fonte
Não basta postar alguma ferramenta ou biblioteca como resposta. Pelo menos demonstre como ele resolve o problema na própria resposta.
Das_Geek 15/11/19
0

Você pode tentar o JarSpy . Existe uma versão do plugin IDEA que eu uso.

Dan Dyer
fonte
0

Seu IDE também deve suportar isso. Meu IDE (SlickeEdit) chama de "biblioteca de tags". Basta adicionar uma biblioteca de tags para o arquivo jar e você poderá navegar pelas classes e métodos de maneira hierárquica.

ÁRVORE
fonte
0

Você pode tentar o JarNavigator para visualizar e pesquisar o conteúdo de um arquivo jar.

Kumaravel
fonte
0

java -xf some-j.jar descompactará um arquivo JAR.

MKatleast3
fonte
jar-lo de -xf someJar.jar
Prajwal