无法安装本地构建的 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" 中获得。
这一系列的问题困扰我快两周了,终于全部解决了。
我继承了一个用 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 上发布了关于此的具体问题:
Eike Stepper 让我了解了 "Oomph" 的一些功能,它是新 Eclipse 安装程序的核心。有一个非常易于使用的 "Bundle Pool Analysis" 功能,可以自动在此池中查找损坏的存档,并为您提供自动修复它们的操作。这可以从 Eclipse 中的 "Oomph" 首选项以及新 Eclipse 安装程序的 "Advanced Mode" 中获得。
这一系列的问题困扰我快两周了,终于全部解决了。