我正在尝试使用以下链接中的命令找到包含我的类的JAR文件:Find a jar file given the class name?
find . -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} GenericClassLoader' \;
但我收到的错误是:
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:131)
at java.util.zip.ZipFile.<init>(ZipFile.java:92)
at sun.tools.jar.Main.list(Main.java:997)
at sun.tools.jar.Main.run(Main.java:242)
at sun.tools.jar.Main.main(Main.java:1167)
请帮助我理解命令以及如何解决此错误。我正在使用bash shell。
答案 0 :(得分:4)
您的文件系统中有一些内容以*.jar
结尾,但它不是有效的存档。要对此进行调试,请将-print
添加到find
命令:
find . -name "*.jar" -print -exec ...
这将使find
在尝试执行sh
命令之前打印文件名。
说明:
find .
:查找当前目录中的所有文件和文件夹-name "*.jar"
,其名称以.jar
-exec
并为每个sh -c
创建一个新shell并执行... jar -tf {}
测试JAR存档。这(也)打印档案find
中的文件列表,将{}
替换为找到的档案路径|
将jar -tf
的结果导入... grep
搜索输入... -H
打印每场比赛的文件名--label {}
由于我们正在阅读stdin,grep
应使用{}
(再次由find替换)作为文件名GenericClassLoader
在jar -tf