java列出了多个jar文件的内容
我在找一个新的工作。类文件放在一堆罐子里
jar tf abc.jar
适用于一个文件。我试过了
find -name "*.jar" | xargs jar tf
什么也没印。我能想到的唯一解决办法是,全部解压,然后搜索。有更好的办法吗?我在LUnix上
编辑: 扫描多个jar时,打印jar文件名和类是很有用的。这种方法效果很好:
find . | grep jar$ | while read fname; do jar tf $fname | grep SchemaBuilder && echo $fname; done
产生的样本输出:
1572 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$1.class
1718 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$2.class
42607 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder.class
./XmlSchema-1.3.2.jar
1572 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$1.class
1718 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$2.class
42607 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder.class
./XmlSchema.jar
# 1 楼答案
我遇到了类似的情况,需要在目录中的jar文件列表中搜索一个类。我还想知道这个类属于哪个jar文件。我使用了下面的代码片段(shell脚本),发现它很有用。下面的脚本将列出包含要搜索的类的jar文件
Shell脚本取自: http://alvinalexander.com/blog/post/java/shell-script-search-search-multiple-jar-files-class-pattern
# 2 楼答案
您还可以使用解压,这比jar更快(-l选项用于打印zip内容)
例如,一个小脚本大致实现了您想要的功能:
# 3 楼答案
我不认为使用exec的必要性,这在Windows上的Cygwin中对我有效:
# 4 楼答案
以下是我在Cygwin中的用法。按照上面的要求,它支持每个jar文件的节头
对于*nix,请删除“.exe”:
# 5 楼答案
您需要将
-n 1
传递给xargs
,以强制它对从find
获取的每个文件名运行一个单独的jar
命令:否则
xargs
的命令行看起来像jar tf file1.jar file2.jar...
,这与预期的含义不同一种有用的调试技术是将
echo
放在xargs
运行的命令之前:这将打印出完整的
jar
命令,而不是执行它,这样您就可以看到它有什么问题# 6 楼答案
您还可以使用find的
-exec
选项