【问题标题】:Unable to install locally-built eclipse plugin, get "Error reading signed content"无法安装本地构建的 Eclipse 插件,出现“读取签名内容时出错”
【发布时间】: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


【解决方案1】:

关于“0 大小”问题:这通常发生在捆绑包的“pack200”版本出现问题并且扩展“*.jar.pack.gz”捆绑包失败时。不确定您是在创建有问题的那个,还是从另一个存储库获取它? 关于“增加详细程度”的问题:

上有一个 wiki 页面
https://wiki.eclipse.org/Equinox/p2/p2.mirrorsURL

这可能会有所帮助。这篇文章主要是关于“mirrorsURL”的,但在最后,它提供了一些选项,您可以将它们放入您的 .options 文件中,以增加 p2 正在经历的进程的输出。这可能会提供更多信息。它提到的两个调试选项是

org.eclipse.equinox.p2.core/debug=true
org.eclipse.equinox.p2.core/artifacts/mirrors=true

从查看“运行配置”的“跟踪”页面看来,其他一些可能与您的问题有关:

org.eclipse.equinox.p2.engine/engine/debug=true
org.eclipse.equinox.p2.engine/certificatechecker/unsigned=true
org.eclipse.equinox.p2.engine/certificatechecker/untrusted=true

HTH

【讨论】:

  • 优秀。就在十分钟前,我终于连接上了我的调试器,并在我的本地 .p2 存储库中发现了已损坏的晦涩 jar 文件。在我“修复”它之前,我会看看这些标志是否会给我更多有用的信息。
  • 在这一点上,我想我已经拥有了我所需要的一切,而无需添加这些选项。我能够找到 SignedBundleHook 和 CertificateChecker 的来源,并且它们都没有围绕有问题的块进行任何日志记录。我想在错误发生之前,我可能会在调用堆栈中更高(更低)的详细日志记录语句中看到对 jar 文件名的引用。
  • 哦,请注意损坏的 jar 在我的 $HOME/.p2 存储库中。有五个“emf” jar 不是零大小,但已损坏(jar tvf 和 unzip 报告格式错误)。我现在正在研究如何修复我的 .p2 存储库中的文件。
【解决方案2】:

这里最终发生的事情是,由于某种原因,我的“$HOME/.p2/pool”树中的五个 jar 文件不知何故损坏了。这可能发生在几周前我的虚拟机磁盘空间不足时。我修复了磁盘空间问题,但可能是 Eclipse 在此期间无法完全写入。

不幸的是,我在尝试安装插件时收到的异常消息没有提到 WHAT 存档文件已损坏。在此过程中,我针对有缺陷的异常消息提交了以下错误报告:https://bugs.eclipse.org/bugs/show_bug.cgi?id=487954。有人在同一天热情地检查了这个修复(显然已经多次受到这个打击)。

在确定哪些存档文件已损坏后,我必须以某种方式修复这些文件。此存储库与本地 Maven 存储库不同,您可以在其中删除损坏的文件并让下一个 Maven 构建恢复它们。

我在 SO 上发布了这个特定问题: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 安装程序的“高级模式”中获得。

我已经为这一系列问题苦苦挣扎了将近两个星期,终于全部解决了。

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 2014-09-08
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2015-12-12
    • 2013-05-25
    • 2013-06-10
    • 2016-03-12
    相关资源
    最近更新 更多