2

我正在尝试使用此链接中给出的以下命令查找包含我的类的 JAR 文件:查找给定类名的 jar 文件?

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。

4

1 回答 1

4

您的文件系统中有一些东西以*.jar但不是有效的存档结尾。要调试它,请添加-printfind命令:

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
于 2013-05-03T10:06:22.340 回答