不能jar -tvf一个jar文件

时间:2014-11-08 00:19:54

标签: tomcat jar gradle jacoco jvm-arguments

我有一个jar文件,文件中的ls -ltr显示了我有效的文件大小和权限。当我使用7Zip打开此文件时,它会成功打开,并且.jar文件也包含有效的MANIFEST.MF文件。

/home/u100012/koba/Infrastructure/build/tmp/expandedArchives/org.jacoco.agent-0.7.2.201409121644.jar_778m6tp3jrtvcetasufl59dmau/jacocoagent.jar

在此文件上运行 jar -tvf ,会出现以下错误消息:

PS :如果我运行" jar -tvf /full/path/to/jacocoagent.jar"就会发生这种情况。文件,但如果我将目录更改为jacocoagent.jar文件所在的完整路径,jar -tvf jacocoagent.jar会 NOT 给我以下错误消息。

java.io.FileNotFoundException: \home\u100012\koba\Infrastructure\build\tmp\expandedArchives\org.jacoco.agent-0.7.2.201409121644.jar_778m6tp3jrtvcetasufl59dmau\jacocoagent.jar (The system cannot find the path specified)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:215)
        at java.util.zip.ZipFile.<init>(ZipFile.java:145)
        at java.util.zip.ZipFile.<init>(ZipFile.java:116)
        at sun.tools.jar.Main.list(Main.java:1004)
        at sun.tools.jar.Main.run(Main.java:245)
        at sun.tools.jar.Main.main(Main.java:1177)

7Zip在.jar文件的META-INF / MANIFEST.MF文件中显示以下内容。

Manifest-Version: 1.0
Premain-Class: org.jacoco.agent.rt.internal_e6e56f0.PreMain
Archiver-Version: Plexus Archiver
Build-Jdk: 1.5.0_22
Built-By: godin
Created-By: Apache Maven
Implementation-Title: JaCoCo Java Agent
Implementation-Version: 0.7.2.201409121644
Implementation-Vendor: Mountainminds GmbH & Co. KG

当我使用上面的jacocoagent.jar文件在Tomcat JVM中设置javaagent以获取Gradle中集成测试的Jacoco Code覆盖时,tomcat启动脚本不会启动并提供相同的错误消息清单/文件。

Catalina.out 日志消息说:

Error occurred during initialization of VM
agent library failed to init: instrument
Error opening zip file or JAR manifest missing : /home/u100012/koba/Infrastructure/build/tmp/expandedArchives/org.jacoco.agent-0.7.2.201409121644.jar_778m6tp3jrtvcetasufl59dmau/jacocoagent.jar

我的问题:

  1. 为什么当7zip和ls Unix命令工作/显示它是一个有效的文件时jar -tvf在jar文件上失败。这是因为,MANIFEST.MF文件的Premain-Class的第二行与build / tmp / expandedArchives文件夹下的工作区中的值有什么不同? Gradle动态创建该文件夹。 PS:如果我运行jar -tvf jacocoagent.jar(当我在该文件所在的目录中时),则不会出现此错误。

  2. 我需要使用哪个代理jar文件(jacocoagent.jar或jacoco-agent.jar),看到diff博客说的是diff文件名。我在项目的构建文件夹树中看到的是jacocoagent.jar

  3. 如何解决此错误消息?

1 个答案:

答案 0 :(得分:0)

回答所有人的问题

  1. -javaagent的路径: xxxxx /jacocoagent.jar(其中 xxxxx 路径 RELATIVE 到项目的当前工作空间 Gradle中的$ projectDir )。因此,如果我从当前工作空间位置给出jacocoagent.jar的相对路径,那么它可以正常工作。 Tomcat成功启动。想知道为什么它不起作用,当我使用完整路径时(因为它没有存在)。
  2. 我是怎么发现的。我

    echo `pwd`
    
    在tomcat运行之前的tomcatStart.sh脚本中的

    它回显我当前的目录是我的工作区(我检查了项目的代码)。 jacocoagent.jar文件到-javaagent是相对的-javaagent:somefolder / jacocoagent.jar将起作用,如果某个文件夹存在于我的项目工作区并且包含jacocoagent.jar。