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

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

  •  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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top