是否有相应的UNIX'which'命令,即对于给定的资源,遍历所有类路径组件并告诉我它在哪个组件中找到? 特别是当类路径中出现多次?
(上下文:我只花了一天的时间来追逐一个错误,该错误归结为一个非常长的类路径,其中包含一个源目录,其中包含过时的源代码(并因此超越)一个已编译的更新代码的编译jar。)
(是的,我知道你可以通过'java -verbose'得到这个,但这会产生大量的输出。
也许 'java -verbose ... | grep SpecificResource' 是最好的方法吗?)
答案 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脚本。