21

我想使用javap工具列出jar中类文件的方法。我该怎么做才能列出 jar 中所有类文件的方法和成员。现在我一次只能上一堂课。

如果我说,我期待这样的事情

javap java.lang.*

它应该列出 java.lang 包中所有类的方法和成员。如果 javap 无法做到这一点,是否有任何此类工具可用?

4

4 回答 4

32
#!/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
于 2009-07-23T13:21:45.263 回答
15

更容易的是

JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)
于 2014-11-20T10:52:01.310 回答
2

首先解压缩 jar 文件,这将为每个包生成一系列目录,然后对每个目录应用 javap 命令。

因此,例如使用 tomcat,您可以在 webapps\balancer 中解压缩 catalina-balancer.jar 文件,然后使用

javap -classpath org\apache\webapp\balancer 规则

这使

编译自“Rule.java”
接口 org.apache.webapp.balancer.Rule{
    公共抽象布尔匹配(javax.servlet.http.HttpServletRequest);
    公共抽象 java.lang.String getRedirectUrl();
}

如果您需要对包中的所有类文件执行此操作,则需要编写脚本或程序来遍历类路径并从文件名中剥离 .class 并将其传递给 javap。

(用 perl/bash/java 编写相当容易)。

于 2009-07-23T13:17:53.427 回答
0

注意:您可能/可能还需要指定特定的 jar 和类的包:

一般来说:

javap -classpath "jarpath.jarname" "package.classname"

在上面的例子中:

javap -classpath RuleContaining.jar org.apache.webapp.balancer.Rule

于 2022-01-13T08:12:52.667 回答