Como faço para imprimir as estruturas de classe em um arquivo jar usando a ferramenta javap?

StackOverflow https://stackoverflow.com/questions/1171549

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu quero listar os métodos dos arquivos de classe na jarra usando a ferramenta javap. Como posso fazê-lo para que ele lista os métodos e membros de todos os arquivos de classe na jarra. Agora eu sou capaz de fazê-lo por apenas uma classe de cada vez.

Eu estou esperando algo como se eu disser

javap java.lang.*

deve recorrer aos métodos e membros de todas as classes no pacote java.lang. Se javap não é capaz disso, existem tais ferramentas disponíveis?

Foi útil?

Solução

#!/bin/bash
# Set the JAR name
jar=<JAR NAME>
# Loop through the classes (everything ending in .class)
for class in $(jar -tf $jar | grep '.class'); do 
    # Replace /'s with .'s
    class=${class//\//.};
    # javap
    javap -classpath $jar ${class//.class/}; 
done

Outras dicas

mais fácil Mesmo seria

JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)

Primeiro descompacte o arquivo jar, este irá produzir uma série de diretórios para cada pacote, em seguida, aplicar o comando javap por diretório.

Assim, por exemplo, com tomcat você pode descompactar o arquivo catalina-balancer.jar em webapps \ balanceador e use

javap -classpath org\apache\webapp\balancer Rule

que dá

Compiled from "Rule.java"
interface org.apache.webapp.balancer.Rule{
    public abstract boolean matches(javax.servlet.http.HttpServletRequest);
    public abstract java.lang.String getRedirectUrl();
}

Se você precisa fazer isso para todos os arquivos de classe em um pacote que você vai precisar para escrever um script ou programa de andar o caminho da classe e tira o .class dos nomes de arquivos e passá-lo para javap.

(Seria bastante fácil de escrever em perl / bash / java).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top