如何使用javap工具在jar文件中打印类结构?

时间:2009-07-23 13:00:38

标签: java command-line javap

我想使用javap工具列出jar中类文件的方法。我该怎么做才能列出jar中所有类文件的方法和成员。现在我能够一次只为一个班级做这件事。

我期待像我说的那样

javap java.lang.*

它应该在java.lang包中登记所有类的方法和成员。如果javap不具备此功能,是否有可用的工具?

3 个答案:

答案 0 :(得分:27)

#!/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

答案 1 :(得分:11)

更容易

JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)

答案 2 :(得分:2)

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

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

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编写相当容易)。