'which'命令等效于在Java类路径上查找资源

时间:2012-02-21 23:22:23

标签: java classpath utility which

是否有相应的UNIX'which'命令,即对于给定的资源,遍历所有类路径组件并告诉我它在哪个组件中找到? 特别是当类路径中出现多次?

(上下文:我只花了一天的时间来追逐一个错误,该错误归结为一个非常长的类路径,其中包含一个源目录,其中包含过时的源代码(并因此超越)一个已编译的更新代码的编译jar。)

(是的,我知道你可以通过'java -verbose'得到这个,但这会产生大量的输出。

也许 'java -verbose ... | grep SpecificResource' 是最好的方法吗?)

3 个答案:

答案 0 :(得分:2)

请参阅jwhich,我相信它完全符合您的要求。推出自己的产品并不困难,但为什么要这样做呢?

答案 1 :(得分:1)

我使用shell脚本在一组JAR中查找类。相关部分是:

find /my/jars -name \*.jar | while read jar; do
    jar -tf "$jar" | fgrep --label="$jar" -l foo/bar/SomeClass.class
done

列出/my/jars中包含文件foo/bar/SomeClass.class的所有JAR。

修改

评论中的这个单行也有效:

grep -rail --include=\*.jar foo/bar/SomeClass.class /my/jars

答案 2 :(得分:0)

您最好的选择是获取类路径,并搜索相关课程的每个元素。

理论上,保证按类路径顺序加载类。但是,如果您的类路径具有通配符元素,则它不再具有确定性。因此,您需要检查这些内容,然后转储与相关资源匹配的类路径元素。

如果java -verbose没有为您提供所需的所有信息,则应使用简短的JRuby / Groovy脚本。