Como faço para imprimir as estruturas de classe em um arquivo jar usando a ferramenta javap?
-
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?
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).