给定一个目录,我如何找出一个类在哪里

发布于 2025-01-06 07:47:22 字数 72 浏览 0 评论 0原文

考虑一下我有一个充满 jar 的目录。是否有一个 java 命令可以在命令提示符中输入,该命令会告诉我可以从哪些 jar 加载类?

Consider that I have a directory full of jars. Is there a java command that I can type into the command prompt that will tell me which jars a class can be loaded from?

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

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

发布评论

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

评论(5

将军与妓 2025-01-13 07:47:22

“Java 命令”(无论它们是什么)通常不在命令行上输入。不过,您可以尝试一个简单的 grep:

 # grep 'my.super.cool.Stuff' *.jar

理论上,需要对点进行转义以防止它们匹配任何字符,但这通常会让您了解类所在的位置。

“Java commands” (whatever they may be) are usually not entered on the command line. You might try a simple grep, though:

 # grep 'my.super.cool.Stuff' *.jar

Theoretically the dots need to be escaped to prevent them from matching any character but this will generally give you an idea where a class is located.

笑看君怀她人 2025-01-13 07:47:22

有一个应用程序可以提供干净的输出,FindClass。他们也有来源,他们可能只是在罐子里摸索。

There's an app for this, FindClass that can provide clean output. They have source as well, they may just be grepping through the jars.

白芷 2025-01-13 07:47:22

查看 Sourceforge 上的“瑞士锉刀”(http://sourceforge.net/projects/swissfileknife/)。要搜索某个名为 QueryParameter 的类,请使用

>sfk larc -dir "*.jar" +filter -+QueryParameter
gwt\gwt-dev.jar\\org\apache\xalan\lib\sql\QueryParameter.class

双反斜杠前面提到的 JAR 文件,后面是 JAR 内的路径。

一旦您习惯了 SFK 的紧凑语法,您就会将它用于很多很多事情。 grep、find 等的绝佳伴侣。

Have a look at "Swiss File Knife" on Sourceforge (http://sourceforge.net/projects/swissfileknife/). To search for some class named, say, QueryParameter, use

>sfk larc -dir "*.jar" +filter -+QueryParameter
gwt\gwt-dev.jar\\org\apache\xalan\lib\sql\QueryParameter.class

The JAR file is mentioned before the double backslash, the path within the JAR is after that.

Once you get used to the compact syntax of SFK, you'll use it for many, many things. Excellent companion to grep, find, and the like.

神也荒唐 2025-01-13 07:47:22

如果您想知道类在运行时何时何地加载到 JVM 中,可以在“java”命令中使用 -verbose:class 选项。

If you want to know when and where classes are loaded into the JVM at runtime, you can use the -verbose:class option on the "java" command.

过期以后 2025-01-13 07:47:22

可能是这样的:

findclass.sh

#!/bin/sh

if [ 2 != $# ] ; then
     echo  "Usage: $0 directory class"
     exit 1
fi

for i in $1/*.jar; do
    if unzip -l $i | grep -q "$2.class"; then 
        echo "Found $2 in $i"
   fi
done

May be something like this:

findclass.sh

#!/bin/sh

if [ 2 != $# ] ; then
     echo  "Usage: $0 directory class"
     exit 1
fi

for i in $1/*.jar; do
    if unzip -l $i | grep -q "$2.class"; then 
        echo "Found $2 in $i"
   fi
done
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文