我的 Eclipse 项目在运行时出错,当到达Problem
在TopLevelDebugClass.main()
. 请注意,这只发生在 Eclipse 中,而不是当我在正常控制台模式下运行应用程序时。
我已将问题缩小到两个 Bouncy Castle 导入语句,当与使用它们的代码一起删除时,可以消除问题。Maven
当我分析使用引入项目的依赖项列表时mvn dependency:tree
,我得到以下信息:
[INFO] myGroupId:myArtifactId:jar:1.0-SNAPSHOT
[INFO] +- dpdncyGroupId:dpdncyArtifactId:jar:master:1.0-SNAPSHOT:compile
[INFO] | +- org.apache.httpcomponents:httpclient:jar:4.0:compile
[INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.0.1:compile
[INFO] | | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] | +- org.slf4j:slf4j-log4j12:jar:1.6.1:compile
[INFO] | +- org.bouncycastle:bcmail-jdk16:jar:1.45:compile
[INFO] | +- org.bouncycastle:bcprov-jdk16:jar:1.45:compile
[INFO] | \- com.google.code.jscep:api:jar:1.1.4:compile
[INFO] | +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile
[INFO] | \- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
wheremyArtifactId
对应于我正在尝试调试的 Eclipse 项目, where TopLevelDebugClass
is 和dpdncyArtifactId
对应于同一 Eclipse 工作区中的另一个项目(即myArtifactId
引用dpdncyArtifactId
)。
冲突的罐子是bcprov-jdk16/bcprov-jdk15和bcmail-jdk16/bcmail-jdk15。我验证了 16 个版本集来自依赖项工件pom.xml
(顶层以下的第一个节点),而 15 个版本集是 jscep 的依赖项(底部)。与上面的树列表一致,Eclipse 项目的 Maven 依赖项列出了 bcprov-jdk 和 bcmail-jdk 的两个集合,它们包含许多相同的类,其中包括导致问题的导入 (org.bouncycastle.jce.PKCS10CertificationRequest
和org.bouncycastle.jce.X509Principal
)。
我有理由相信这种模糊性导致了 Eclipse(但不是本机 JRE)中的争用,因为它不知道从两个 jar 中的哪一个加载类。
我可以在 Eclipse 中做些什么来解决这个争用,以便我可以在调试器中运行我的项目吗?如果这是当前无法解决的 Eclipse 中的错误,也将考虑如何在 Maven 中解决问题的任何建议。
最后但并非最不重要的一点是,请注意,我正在从事一项新工作,试图跟上环境的步伐。欢迎提出架构更改建议,但不是我正在寻找的答案,因为我还没有能力进行此类更改。本质上,这是由其他人设计的,而我只是一个新手。