Как распечатать структуры классов в файле jar с помощью инструмента javap?

Я хочу перечислить методы файлов классов в банке с помощью инструмента javap. Как мне сделать так, чтобы он перечислял методы и члены всех файлов классов в банке. Прямо сейчас я могу сделать это только для одного класса за раз.

Я ожидаю что-то вроде, если я скажу

javap java.lang.*

он должен задействовать методы и члены всех классов в пакете java.lang. Если javap на это не способен, есть ли такие инструменты?


person Prabhu R    schedule 23.07.2009    source источник


Ответы (3)


Еще проще было бы

JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)
person Bex    schedule 20.11.2014
comment
добавьте JARNAME=/path/to/jar ‹остальная часть команды›, и это сохранит всю операцию в одной строке - person WestCoastProjects; 23.07.2015

Сначала разархивируйте файл 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).

person Rudi Bierach    schedule 23.07.2009
comment
Конечно, мне нравится, когда вокруг моей системы лежат дополнительные вещи. Это работает, но не красиво. - person WestCoastProjects; 23.07.2015

person    schedule
comment
javap с радостью разберет имена классов с / вместо ., вам нужно только удалить суффикс .class. Я использую zipinfo -1 ${jar} \*.class| sed 's/\.class//' | xargs javap -classpath "$jar" -c -l -private > ${jar}.javap - person Miserable Variable; 18.07.2014