我继承了一个较大的Eclipse插件代码库,它使用Maven Tycho构建。完整版本会为插件生成更新站点。
我已经通过运行测试实例并指定要加载的插件成功测试了该插件,但我现在正在尝试安装插件"通常"来自本地构建的更新站点。在更新站点条目中,我在update-site目标文件夹中指定了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)
在搜寻其他事件时,我发现了似乎与此相关的各种问题,但没有具体的问题。我发现一些人没有提出未经证实的建议来删除所有&#34; artifacts.xml&#34; Eclipse发行版中的文件。由于我没有任何其他建议,我尝试了(首先将它们保存在tar文件中),然后重新启动Eclipse,然后重新安装,但这没有任何效果。
我无法告诉WHICH这是一个抱怨的zip文件。我想它不是主要的更新站点zip。我查看了&#34; target / repository&#34;中存在的所有jar文件,但没有一个被签名。我不清楚他们应该是谁。据我所知,此应用程序的构建过程应该是生成一个有效的更新站点。
我能提供哪些其他信息可以说明这一点?
更新:
我尝试通过选择&#34; Local&#34;从等式中删除一个zip文件。而不是&#34;存档&#34;当我在Eclipse中创建更新站点条目,而不是选择&#34; target / .zip&#34;时,我选择了&#34; target / repository&#34;,它与zip文件具有相同的内容。不幸的是,这没有任何区别。同样的错误。
更新:
我不知道这是否重要,但我注意到当Eclipse试图安装插件时,它会显示看似无害的&#34;安装细节&#34;页面,其中列出了要安装的插件,但我偶然注意到此插件列表下方是&#34;尺寸:&#34; label,其值为&#34; 0字节&#34;。这是否重要,如果是,那表明了什么?
更新:
将调试器连接到目标实例后,我发现损坏的jar是&#34; $ HOME / .p2 / pool / plugins / org.eclipse.emf.mapping_2.9.0.v20160201-0859。罐子&#34 ;.这个文件长度不是零,但&#34; jar&#34;和#34;解压&#34;报告该文件已损坏。我找到了另外四个&#34; org.eclipse.emf。*&#34;有类似问题的罐子,以及p2回购中的所有其他罐子都没问题。
现在我知道哪些文件已损坏,我该怎么办呢?我尝试将损坏的jar文件移动到另一个位置(并仔细记录信息),然后重新启动Eclipse并重新安装插件。它仍然失败并且&#34; CheckTrust&#34;阶段,但这次它报告丢失的jar文件的完整路径。
如何修复这些文件?我是否必须在网上某处找到有效的副本?
(我已提交错误报告,在原始异常报告中添加损坏的zip文件的完整路径。)
答案 0 :(得分:3)
最终发生的事情是由于某种原因,我的“$ HOME / .p2 / pool”树中的五个jar文件以某种方式被破坏了。几周前我的虚拟机磁盘空间不足时,可能会发生这种情况。我修复了磁盘空间问题,但是在这段时间内Eclipse可能无法完全写出来。
我在尝试安装插件时收到的异常消息很遗憾没有提到WHAT存档文件已损坏。在此过程中,我为有缺陷的异常消息提交了以下错误报告:https://bugs.eclipse.org/bugs/show_bug.cgi?id=487954。有人在同一天热情地检查了这个问题(显然已被多次击中)。
在确定哪些存档文件已损坏后,我不得不以某种方式修复这些文件。此存储库与本地Maven存储库不同,您可以在其中删除损坏的文件并让下一个Maven构建版本恢复它们。
我发布了关于此问题的具体问题:How can I repair a damaged eclipse $HOME/.p2 repository?,以及Eclipse平台论坛:https://www.eclipse.org/forums/index.php/m/1723920/#msg_1723920。
Eike Stepper让我了解了“Oomph”的一些功能,这是新Eclipse安装程序的核心。有一个非常容易使用的“捆绑池分析”功能,可以自动查找此池中已损坏的归档,并为您提供自动修复它们的操作。这可以从Eclipse中的“Oomph”首选项以及新Eclipse安装程序中的“高级模式”中获得。
我已经在这两个星期的问题中苦苦挣扎了近两个星期了,而且它终于全部修好了。
答案 1 :(得分:0)
关于&#34; 0尺寸&#34;问题:这通常发生在&#34; pack200&#34;捆绑的版本和扩展&#34; * .jar.pack.gz&#34;捆绑失败。不确定您是创建问题的那个,还是从另一个存储库获取该问题? 关于&#34;增加冗长度&#34;问题:
有一个维基页面org.eclipse.equinox.p2.core/debug=true
org.eclipse.equinox.p2.core/artifacts/mirrors=true
可能有所帮助。这篇文章主要是关于&#34; mirrorsURL&#34;,但最后,它提供了一些可以放在你.options文件中的选项,它增加了p2正在经历的进程的输出。这可能会提供更多信息。它提到的两个调试选项是
org.eclipse.equinox.p2.engine/engine/debug=true
org.eclipse.equinox.p2.engine/certificatechecker/unsigned=true
org.eclipse.equinox.p2.engine/certificatechecker/untrusted=true
从查看&#34;追踪&#34; &#39;运行配置的页面&#39;看起来其他一些可能与您的问题有关:
publish-composite
HTH