Eclipse 2020-06版本插件安装失败,求非升级类解决方案
问题:Eclipse 2020-06安装插件失败(签名算法不兼容)
因开发软件兼容性要求,必须使用Eclipse IDE 2020-06版本,但该版本搭载的旧版equinox框架不支持当前多数插件使用的SHA-256withRSA签名算法(对应OID 1.2.840.113549.1.1.11),导致插件安装失败。
错误信息
An error occurred while collecting items to be installed session context was:(profile=epp.package.rcp, phase=org.eclipse.equinox.internal.p2.engine.phases.Collect, operand=, action=). Problems downloading artifact: osgi.bundle,org.sonarlint.eclipse.cdt,7.8.0.63129. Error reading signed content:C:\Users\me~1\AppData\Local\Temp\signatureFile3792878232785362905.jar An error occurred while processing the signatures for the file: C:\Users\me~1\AppData\Local\Temp\signatureFile3792878232785362905.jar
日志错误详情
!SUBENTRY 1 org.eclipse.equinox.p2.artifact.repository 4 0 2023-03-24 11:50:21.996 !MESSAGE Problems downloading artifact: org.eclipse.update.feature,org.sonarlint.eclipse.feature,7.8.0.63129. !SUBENTRY 2 org.eclipse.equinox.p2.artifact.repository 4 2 2023-03-24 11:50:21.996 !MESSAGE Error reading signed content:C:\Users\me~1\AppData\Local\Temp\signatureFile4976703525857637395.jar !STACK 0 java.security.NoSuchAlgorithmException: An error occurred while processing the signatures for the file: C:\Users\me~1\AppData\Local\Temp\signatureFile4976703525857637395.jar at org.eclipse.osgi.internal.signedcontent.SignedBundleHook.getSignedContent(SignedBundleHook.java:231) at org.eclipse.equinox.internal.p2.artifact.repository.SignatureVerifier.verifyContent(SignatureVerifier.java:84) at org.eclipse.equinox.internal.p2.artifact.repository.SignatureVerifier.verify(SignatureVerifier.java:66) at org.eclipse.equinox.internal.p2.artifact.repository.SignatureVerifier.close(SignatureVerifier.java:115) at org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStep.close(ProcessingStep.java:92) at org.eclipse.equinox.internal.p2.artifact.processors.checksum.MessageDigestProcessingStep.close(MessageDigestProcessingStep.java:58) at org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStep.close(ProcessingStep.java:92) at org.eclipse.equinox.internal.p2.artifact.processors.checksum.MessageDigestProcessingStep.close(MessageDigestProcessingStep.java:58) at org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStep.close(ProcessingStep.java:92) at org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ZipVerifierStep.close(ZipVerifierStep.java:48) at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.reportStatus(SimpleArtifactRepository.java:1250) at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:645) at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:776) at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.getArtifact(MirrorRequest.java:319) at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transferSingle(MirrorRequest.java:289) at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transfer(MirrorRequest.java:225) at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.perform(MirrorRequest.java:155) at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:759) at org.eclipse.equinox.internal.p2.artifact.repository.simple.DownloadJob.run(DownloadJob.java:64) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Caused by: java.security.NoSuchAlgorithmException: No algorithm found for 1.2.840.113549.1.1.11 at org.eclipse.osgi.internal.signedcontent.PKCS7Processor.findEncryption(PKCS7Processor.java:95) at org.eclipse.osgi.internal.signedcontent.PKCS7Processor.processSignerInfos(PKCS7Processor.java:364) at org.eclipse.osgi.internal.signedcontent.PKCS7Processor.<init>(PKCS7Processor.java:172) at org.eclipse.osgi.internal.signedcontent.SignatureBlockProcessor.processSigner(SignatureBlockProcessor.java:109) at org.eclipse.osgi.internal.signedcontent.SignatureBlockProcessor.process(SignatureBlockProcessor.java:76) at org.eclipse.osgi.internal.signedcontent.SignedBundleFile.initializeSignedContent(SignedBundleFile.java:47) at org.eclipse.osgi.internal.signedcontent.SignedBundleHook.getSignedContent(SignedBundleHook.java:223) ... 19 more
适配旧版本的解决办法
1. 临时禁用签名验证
- 启动参数法:在Eclipse快捷方式的目标栏末尾添加
-Dorg.eclipse.equinox.p2.skipSignatureValidation=true(注意前面有空格),或者在启动脚本中加入该参数后启动Eclipse,跳过p2的签名校验步骤。 - 配置文件法:找到Eclipse安装目录下的
eclipse.ini文件,在文件末尾新增一行:-Dorg.eclipse.equinox.p2.skipSignatureValidation=true,保存后重启Eclipse。
2. 替换equinox核心组件(手动补丁)
从Eclipse 2021-06及以后的版本中提取支持SHA-256withRSA签名算法的org.eclipse.osgi核心JAR包,替换当前2020-06版本中的对应文件:
- 关闭Eclipse,找到安装目录下
plugins文件夹中的org.eclipse.osgi_*.jar文件; - 下载兼容版本的
org.eclipse.osgiJAR(建议选择2021-06版本的同系列核心包,确保版本兼容性); - 备份原文件后替换,重启Eclipse尝试安装插件。
3. 安装插件的旧版本
查找目标插件(如SonarLint)支持旧签名算法的历史版本,例如SonarLint 6.x系列,这类版本通常使用旧的签名算法,可兼容Eclipse 2020-06的equinox框架。
内容的提问来源于stack exchange,提问作者Skrelp
相关产品推荐
相关产品推荐

