我有一个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
我的问题:
为什么当7zip和ls Unix命令工作/显示它是一个有效的文件时jar -tvf在jar文件上失败。这是因为,MANIFEST.MF文件的Premain-Class的第二行与build / tmp / expandedArchives文件夹下的工作区中的值有什么不同? Gradle动态创建该文件夹。 PS:如果我运行jar -tvf jacocoagent.jar(当我在该文件所在的目录中时),则不会出现此错误。
我需要使用哪个代理jar文件(jacocoagent.jar或jacoco-agent.jar),看到diff博客说的是diff文件名。我在项目的构建文件夹树中看到的是jacocoagent.jar
如何解决此错误消息?
答案 0 :(得分:0)
回答所有人的问题
我是怎么发现的。我
echo `pwd`
在tomcat运行之前的tomcatStart.sh脚本中的它回显我当前的目录是我的工作区(我检查了项目的代码)。 jacocoagent.jar文件到-javaagent是相对的-javaagent:somefolder / jacocoagent.jar将起作用,如果某个文件夹存在于我的项目工作区并且包含jacocoagent.jar。