0

3 つのプロジェクトがあります。B は A に依存し、C は A と B に依存します。A と B は両方とも、バージョン 1 のパッケージ P、つまり P1 に依存します。ここで、C は P の別のバージョンを導入し、P2 と名付けます。

依存関係ツリーは次のようになります

  P1   P1
  ^     ^
  |     |
  A  <- B
  ^     ^
   \   /
    \ /
     C -> P2

pom.xmlP の競合を避けるために、 A と B の を変更して P1 を削除すること
にしmvn eclipse:eclipseました。

次に、すべてのプロジェクトを注意深くチェックしました。

In A:  Re-check the pom.xml -> NO dependency of P1 , it won't resolve P1 !

In B:  Re-check the pom.xml -> NO dependency of P1 , it won't resolve P1 !

In C:  Re-check the pom.xml -> NO dependency of P1 itself , but it DOES resolve P1!
  |
  | -  Comment out dependency of A:  Resolve P1 !
  |
  | -  Comment out dependency of B:  Resolve P1 !
  |  
  | -  Comment out dependency of both A & B: Won't resolve P1 !

Finally, I make sure that other packages of A , B and C that depend on do not
 depend on  P1(Actually, P1 is a small SDK with limited usage, I'm sure other
 packages won't denpend on it)

ここに奇妙なことがあります。チェックから、A または B のいずれかが P1 を導入しているように見えますが、A と B ではそれぞれ、どちらも P1 を導入しないとチェックして結論付けています。

何か間違っていますか?

アップデート

私は最終的に何が間違っているのかを理解しています。答えを見てください。

4

2 に答える 2

1

私は最終的に何が間違っているのかを理解します:

Cからmvn dependency:tree、P1 が B.jar のサブレベルに存在することがわかりました。だから私は B に行っmvn clean installて update を実行しB.jar、次に C に戻って、今はすべて問題ありません。

私はこれが起こるかもしれないと思います:

B は P1 に依存するプロジェクトであるため、B.jarB の依存関係を記録する の古いファイル (実際にB.jarを抽出し、それが呼び出されていることがわかりましたMETA-INF/maven/path/to/B/pom.xml)のように更新されませ。したがって、Cで実行すると、Bが解決されます(CはBにもプロジェクト依存しているため、 B.jar を解決します)。これは、の新しいpom.xmlではなく、ダーティなpom.xmlによってP1を解決します)。これは貧弱な設計であり、あいまいなバグが発生しやすいと思います!pom.xmlBmvn eclipse: eclipseB.jarB

于 2012-10-19T02:58:26.300 に答える
0

プロジェクト C で mvn dependency:tree を実行してみると、P1 がどこから来たのかがわかるはずです。

于 2012-10-18T12:58:35.597 に答える