Как распечатать структуры классов в файле jar с помощью инструмента javap?
-
19-09-2019 - |
Вопрос
Я хочу перечислить методы файлов классов в банке с помощью инструмента javap.Как мне сделать так, чтобы в нем были перечислены методы и члены всех файлов классов в банке.Сейчас я могу делать это только для одного класса за раз.
Я ожидаю чего-то вроде того, если скажу
javap java.lang.*
он должен перечислить методы и члены всех классов в пакете java.lang.Если javap на это не способен, существуют ли такие инструменты?
Решение
#!/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
Другие советы
Еще проще было бы
JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)
Сначала разархивируйте файл jar, это даст несколько каталогов для каждого пакета, затем примените команду javap для каждого каталога.
Например, с помощью Tomcat вы можете разархивировать файл catalina-balancer.jar в webapps\balancer, а затем использовать
javap -classpath org\apache\webapp\balancer Rule
который дает
Compiled from "Rule.java" interface org.apache.webapp.balancer.Rule{ public abstract boolean matches(javax.servlet.http.HttpServletRequest); public abstract java.lang.String getRedirectUrl(); }
Если вам нужно сделать это для всех файлов классов в пакете, вам нужно будет написать сценарий или программу для обхода пути к классам, удаления .class из имен файлов и передачи его в javap.
(Было бы довольно легко написать на perl/bash/java).