我想使用javap工具列出jar中类文件的方法。我该怎么做才能列出 jar 中所有类文件的方法和成员。现在我一次只能上一堂课。
如果我说,我期待这样的事情
javap java.lang.*
它应该列出 java.lang 包中所有类的方法和成员。如果 javap 无法做到这一点,是否有任何此类工具可用?
我想使用javap工具列出jar中类文件的方法。我该怎么做才能列出 jar 中所有类文件的方法和成员。现在我一次只能上一堂课。
如果我说,我期待这样的事情
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,您可以在 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 编写相当容易)。
注意:您可能/可能还需要指定特定的 jar 和类的包:
一般来说:
javap -classpath "jarpath.jarname" "package.classname"
在上面的例子中:
javap -classpath RuleContaining.jar org.apache.webapp.balancer.Rule