How do I print the class structures in a jar file using the javap tool?

半城伤御伤魂 提交于 2019-11-29 02:25:54

问题


I want to list the methods of the class files in the jar using the javap tool. How do I do it so that it lists the methods and members of all the class files in the jar. Right now I am able to do it for just one class at a time.

I am expecting something like if I say

javap java.lang.*

it should enlist the methods and members of all the classes in java.lang package. If javap is not capable of that, are there any such tools available?


回答1:


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



回答2:


Even easier would be

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



回答3:


First unzip the jar file, this will yield a series of directories for each package, then apply the javap command per directory.

So for example with tomcat you can unzip the catalina-balancer.jar file in webapps\balancer and then use

javap -classpath org\apache\webapp\balancer Rule

which gives

Compiled from "Rule.java"
interface org.apache.webapp.balancer.Rule{
    public abstract boolean matches(javax.servlet.http.HttpServletRequest);
    public abstract java.lang.String getRedirectUrl();
}

If you need to do this for all the class files in a package you will need to write a script or program to walk the classpath and strip the .class from the filenames and pass it to javap.

(It would be fairly easy to write in perl/bash/java).



来源:https://stackoverflow.com/questions/1171549/how-do-i-print-the-class-structures-in-a-jar-file-using-the-javap-tool

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!