Как распечатать структуры классов в файле jar с помощью инструмента javap?
Я хочу перечислить методы файлов классов в банке с помощью инструмента javap. Как это сделать, чтобы в нем перечислены методы и члены всех файлов классов в банке. Сейчас я могу сделать это только для одного класса за раз.
Я ожидаю что-то вроде, если скажу
javap java.lang.*
он должен заручиться методами и членами всех классов в пакете java.lang. Если javap не способен на это, существуют ли такие инструменты?
Ответы
Ответ 1
#!/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 / with .'s
class=${class//\//.};
# javap
javap -classpath $jar ${class//.class/};
done
Ответ 2
Еще проще было бы
javap -classpath <JARNAME> $(jar -tf <JARNAME> | grep "class$" | sed s/\.class$//)
Ответ 3
Сначала распакуйте файл 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();
}
Если вам нужно сделать это для всех файлов классов в пакете, вам нужно будет написать script или программу, чтобы пройти путь к классам и удалить .class из имен файлов и передать их в javap.
(Это было бы довольно легко написать в perl/ bash/java).