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

发布于 2024-07-29 02:42:52 字数 214 浏览 10 评论 0原文

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

我期待类似的事情,如果我说它

javap java.lang.*

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

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

薄暮涼年 2024-08-05 02:42:52
#!/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
#!/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
我是男神闪亮亮 2024-08-05 02:42:52

更容易的是

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

Even easier would be

JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)
只是我以为 2024-08-05 02:42:52

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

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

冰葑 2024-08-05 02:42:52

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

一般情况下:

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

在上面的示例中:

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

Note: You may/can also need to specify the specific jar, and the package of the class:

In general:

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

In the above example:

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

单调的奢华 2024-08-05 02:42:52

您还可以将 jar 中的类的 URL 指定为 javap,如下所示:

javap -v jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class

you can also specify the URL for a class in the jar to javap like this:

javap -v jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文