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 プロジェクトに対応し、 whereTopLevelDebugClass
はdpdncyArtifactId
同じ Eclipse ワークスペース内の別のプロジェクトに対応します (つまり、 をmyArtifactId
参照dpdncyArtifactId
しています)。
競合する jar はbcprov-jdk16/bcprov-jdk15とbcmail-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 内で問題を解決する方法についての提案も考慮されます。
最後になりましたが、私は新しい仕事に就いており、環境に慣れようとしています。アーキテクチャの変更に関する提案は歓迎しますが、私はまだそのような変更を行う立場にないため、探している答えではありません。本質的に、これは他の誰かによって設計されたものであり、私はただの初心者です。