0

Problemクラスの新しいインスタンスが で起動されている行に到達すると、実行時に Eclipse プロジェクトで「ソースが見つかりません」というエラーが表示されますTopLevelDebugClass.main()。これは Eclipse でのみ発生し、通常のコンソール モードでアプリを実行した場合には発生しないことに注意してください。

問題を 2 つの 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 プロジェクトに対応し、 whereTopLevelDebugClassdpdncyArtifactId同じ Eclipse ワークスペース内の別のプロジェクトに対応します (つまり、 をmyArtifactId参照dpdncyArtifactIdしています)。

競合する jar はbcprov-jdk16/bcprov-jdk15bcmail-jdk16/bcmail-jdk15です。16 バージョン セットは依存性アーティファクトpom.xml(トップ レベルの下の 1 番目のノード) からのものであり、15 バージョン セットは jscep の依存関係 (下) であることを確認しました。上記のツリー リストと一致して、Eclipse プロジェクトの Maven Dependencies には、bcprov-jdk と bcmail-jdk の両方のセットがリストされています。これらには、同じクラスの多くが含まれており、その中には問題の原因となっているインポート (org.bouncycastle.jce.PKCS10CertificationRequestおよびorg.bouncycastle.jce.X509Principal) があります。

2 つの jar のどちらからクラスをロードするかがわからないため、このあいまいさが Eclipse 内で競合を引き起こしていると考える理由があります (ネイティブ JRE ではありません)。

デバッガーでプロジェクトを実行できるように、この競合を解決するために Eclipse 内でできることはありますか? これが現在回避できない Eclipse のバグである場合は、Maven 内で問題を解決する方法についての提案も考慮されます。

最後になりましたが、私は新しい仕事に就いており、環境に慣れようとしています。アーキテクチャの変更に関する提案は歓迎しますが、私はまだそのような変更を行う立場にないため、探している答えではありません。本質的に、これは他の誰かによって設計されたものであり、私はただの初心者です。

4

1 に答える 1

1

の依存関係でcom.google.code.jscep:api、スタンザを使用して、exclusionsMaven がbcprov-jdk15アーティファクトを取り込まないようにしてください。これは、誰かが適切にバージョン管理する代わりに、複数のアーティファクトで同じ名前のクラスを愚かに配布した、あなたが説明しているように見える状況にのみ適用されることに注意してください。

于 2013-09-11T19:30:29.133 に答える