在Linux中查找JAR中存在的类文件

时间:2013-05-03 09:48:28

标签: bash unix jar

我正在尝试使用以下链接中的命令找到包含我的类的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。

1 个答案:

答案 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替换)作为文件名
  • GenericClassLoaderjar -tf
  • 的输出中搜索此字符串