无法安装本地构建的 eclipse 插件,获取 "Error reading signed content"

Unable to install locally-built eclipse plugin, get "Error reading signed content"

我继承了一个用 Maven Tycho 构建的大型 Eclipse 插件代码库。完整构建会为插件生成一个更新站点。

我仅通过 运行 一个测试实例并指定要加载的插件就成功地测试了插件,但我现在正尝试从本地构建的更新中安装插件 "normally"地点。在更新站点条目中,我指定了更新站点 target 文件夹中 zip 文件的路径。它能够显示更新站点中存在的功能列表(只有一个)。我检查了一下并继续。它通过了许可证批准并tar被安装,但后来失败了:

An error occurred during the org.eclipse.equinox.internal.p2.engine.phases.CheckTrust phase. session context was:(profile=_home_opnfv_eclipse_java-neon_eclipse, phase=org.eclipse.equinox.internal.p2.engine.phases.CheckTrust, operand=, action=). Error reading signed content. error in opening zip file

从 .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 文件中),然后重新 tarted Eclipse,然后重新安装,但没有任何效果。

我不知道这是在抱怨哪个 zip 文件。我想这不是主要的更新站点 zip。我查看了 "target/repository" 中存在的所有 jar 文件,其中 none 已签名。我不清楚他们应该是。据我所知,此应用程序的构建过程应该生成有效的更新站点。

我还能提供哪些其他信息来说明这一点?

更新:

当我在 Eclipse 中创建更新站点条目时,我尝试通过选择 "Local" 而不是 "Archive" 从等式中删除一个 zip 文件,而不是选择 "target/.zip",我选择了"target/repository",与压缩文件内容相同。不幸的是,这没有任何区别。同样的错误。

更新:

我不知道这是否重要,但我注意到当 Eclipse 试图安装插件时,它显示看似无害的 "Install Details" 页面,其中列出了要安装的插件,但我发生了注意这个插件列表下面有一个"Size:"标签,上面的值为“0 bytes”。这重要吗?如果重要,说明什么?

更新:

将调试器连接到 target 实例后,我发现损坏的 jar 是“$HOME/.p2/pool/plugins/org.eclipse.emf.[=65= .9.0.v20160201-0859.jar”。此文件的长度不是零,但 "jar" 和 "unzip" 报告文件已损坏。我发现另外四个 "org.eclipse.emf.*" 罐子有类似的问题,p2 仓库中的所有其他罐子都很好。

现在我知道哪些文件已损坏,我该怎么办?我尝试将损坏的 jar 文件移动到另一个位置(并仔细记录信息),然后 restarting Eclipse 并重新安装插件。它仍然失败并在 "CheckTrust" 阶段出现错误,但这次它报告了丢失的 jar 文件的完整路径。

如何修复这些文件?我必须在网上的某个地方找到它们的有效副本吗?

(我已提交错误报告以在原始异常报告中添加损坏的 zip 文件的完整路径。)

关于“0 size”问题:这通常发生在 "pack200" 版本的捆绑包出现问题并且扩展“*.jar.pack.gz”捆绑包失败时。不确定您创建的是有问题的,还是从另一个存储库获取的? 关于 "increasing the verbosity" 问题:

有一个 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

通过查看 'run configurations' 的 "tracing" 页面,似乎其他人可能与您的问题相关:

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

这里最终发生的事情是,出于某种原因,我的“$HOME/.p2/pool”树中的五个 jar 文件以某种方式损坏了。这可能是几周前我的虚拟机 运行 磁盘 space 不足时发生的。我修复了磁盘space的问题,但是Eclipse可能在那段时间没有完全写入一些东西。

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

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

我在 SO 上发布了关于此的具体问题: , and also on the Eclipse Platform forum: https://www.eclipse.org/forums/index.php/m/1723920/#msg_1723920 .

Eike Stepper 让我了解了 "Oomph" 的一些功能,它是新 Eclipse 安装程序的核心。有一个非常易于使用的 "Bundle Pool Analysis" 功能,可以自动在此池中查找损坏的存档,并为您提供自动修复它们的操作。这可以从 Eclipse 中的 "Oomph" 首选项以及新 Eclipse 安装程序的 "Advanced Mode" 中获得。

这一系列的问题困扰我快两周了,终于全部解决了。