我正在尝试使用此链接中给出的以下命令查找包含我的类的 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。
最佳答案
您的文件系统中有一些东西以 *.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 {}
由于我们从标准输入读取,grep
应该使用{}
(再次被 find 取代)作为文件名GenericClassLoader
在jar -tf
的输出中搜索此字符串
关于bash - 在 Linux 中查找 JAR 中存在的类文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356061/