【发布时间】:2016-05-22 14:27:33
【问题描述】:
我继承了一个较大的 Eclipse 插件代码库,它使用 Maven Tycho 构建。完整版本会为插件生成一个更新站点。
我已经通过运行一个测试实例并指定要加载的插件成功地测试了该插件,但我现在正尝试从本地构建的更新站点“正常”安装插件。在更新站点条目中,我指定了更新站点目标文件夹中 zip 文件的路径。它能够显示更新站点中存在的功能列表(只有一个)。我检查并继续。它通过了许可证批准并开始安装,但随后失败:
在 org.eclipse.equinox.internal.p2.engine.phases.CheckTrust 阶段发生错误。 会话上下文是:(profile=_home_opnfv_eclipse_java-neon_eclipse,phase=org.eclipse.equinox.internal.p2.engine.phases.CheckTrust,operand=,action=)。 读取签名内容时出错。 打开 zip 文件时出错
从 .metadata/.log 文件中,有以下不足为奇的堆栈跟踪(摘录):
!ENTRY org.eclipse.equinox.p2.engine 4 4 2016-02-10 18:22:49.495
!MESSAGE An error occurred during the org.eclipse.equinox.internal.p2.engine.phases.CheckTrust phase.
!SUBENTRY 1 org.eclipse.equinox.p2.engine 4 0 2016-02-10 18:22:49.495
!MESSAGE session context was:(profile=_home_opnfv_eclipse_java-neon_eclipse, phase=org.eclipse.equinox.internal.p2.engine.phases.CheckTrust, operand=, action=).
!SUBENTRY 1 org.eclipse.equinox.p2.engine 4 0 2016-02-10 18:22:49.495
!MESSAGE Error reading signed content.
!STACK 0
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:219)
at java.util.zip.ZipFile.<init>(ZipFile.java:149)
at java.util.zip.ZipFile.<init>(ZipFile.java:163)
at org.eclipse.osgi.internal.signedcontent.SignedBundleHook.getSignedContent(SignedBundleHook.java:209)
at org.eclipse.equinox.internal.p2.engine.phases.CertificateChecker.checkCertificates(CertificateChecker.java:73)
在寻找这种情况的其他情况时,我发现了各种似乎与此相关的问题,但没有具体的问题。我发现一些人提出了删除 Eclipse 发行版中所有“artifacts.xml”文件的未经证实的建议。由于我没有任何其他建议,我尝试了(先将它们保存在 tar 文件中),然后重新启动 Eclipse,然后重新安装,但没有效果。
我不知道这是在抱怨哪个 zip 文件。我想这不是主要的更新站点 zip。我查看了“目标/存储库”中存在的所有 jar 文件,但没有一个是签名的。我不清楚他们应该是。据我所知,此应用程序的构建过程应该会生成一个有效的更新站点。
我还能提供哪些其他信息来说明这一点?
更新:
当我在 Eclipse 中创建更新站点条目时,我尝试通过选择“Local”而不是“Archive”从等式中删除一个 zip 文件,而不是选择“target/.zip”,而是选择了“target/repository” ,其内容与 zip 文件相同。不幸的是,这并没有什么不同。同样的错误。
更新:
我不知道这是否重要,但我注意到当 Eclipse 尝试安装插件时,它会显示看似无害的“安装详细信息”页面,其中列出了要安装的插件,但我碰巧注意到这个插件列表下面是一个“Size:”标签,上面的值为“0 bytes”。这重要吗?如果重要,这说明什么?
更新:
将调试器连接到目标实例后,我发现损坏的 jar 是“$HOME/.p2/pool/plugins/org.eclipse.emf.mapping_2.9.0.v20160201-0859.jar”。这个文件不是零长度,但是“jar”和“unzip”报告文件已损坏。我发现其他四个“org.eclipse.emf.*” jars 有类似问题,p2 repo 中的所有其他 jars 都很好。
现在我知道哪些文件已损坏,我该怎么办?我尝试将损坏的 jar 文件移动到另一个位置(并仔细记录信息),然后重新启动 Eclipse 并重新安装插件。它仍然在“CheckTrust”阶段失败并出现错误,但这次它报告了丢失的 jar 文件的完整路径。
如何修复这些文件?我必须在网上某个地方找到它们的有效副本吗?
(我已提交错误报告以在原始异常报告中添加损坏的 zip 文件的完整路径。)
【问题讨论】:
-
从
CertificateChecker中的代码来看,这只是检查 if jar 是否已签名,因此未签名的事实不是问题。 -
谢谢。知道我是否可以启用更多“详细信息”,以便我至少可以知道它无法读取哪个 zip 文件?
-
如果重要,我更改了我的测试用例,以便它使用“本地”按钮而不是使用“存档”按钮选择“目标/存储库”文件夹,以至少删除包含问题中的“zip”文件。我更新了帖子以反映这一点。
标签: java eclipse maven eclipse-plugin tycho