2016-05-16 22 views
1

私は親POMといくつかのサブモジュールからなるmavenプロジェクトを持っています。それはIntellij内でコンパイルされ、正常に動作します(私はこれがMavenではなくjavacを使用していると仮定しています)。POMで指定されていない依存関係を取り除くMaven

を実行すると、 "RequireUpperBoundDeps"のためにビルドが失敗します。これは、the documentationからビルド時に解決されたバージョンが同じアーティファクトの依存バージョンよりも低いことを意味します。ここで(消毒)出力されます:

[INFO] --- maven-enforcer-plugin:1.4:enforce (enforce-maven) @ my-service --- 
[WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireUpperBoundDeps failed with message: 
Failed while enforcing RequireUpperBoundDeps. The error(s) are [ 
Require upper bound dependencies error for com.h2database:h2:1.3.168 paths to dependency are: 
+-com.example.services:my-service:1.0.0-SNAPSHOT 
    +-com.h2database:h2:1.3.168 
and 
+-com.example.services:my-service:1.0.0-SNAPSHOT 
    +-com.example.libs:my-libs:2.0.0 
    +-com.h2database:h2:1.3.168 (managed) <-- com.h2database:h2:1.4.190 
] 

これはh2my-serviceの直接の依存関係であることを暗示しているようだが、それは、任意のPOMS、モジュールまたは親にそのように宣言されていません。 h2は、my-libsからのみ入力する必要があります。さらに、それはh2がバージョン1.3.168であることを「管理」していると主張する。私はこの情報をどこに得ているのか分かりません。 my-libsh2バージョン1.4.190を使用します。

私は明示的にh2my-service下(両方のバージョン)を含め、my-libs依存からh2を除く、完全に新鮮な.m2ディレクトリから始まる試してみました。何も動作せず、依存関係からh2を除外すると、データベースと対話するクラス(JDBI経由)のいずれかでNoSuchPropertyExceptionという結果になります。

h2の正しいバージョンを認識してプロジェクトを組み込み、正常にビルドするにはどうすればよいですか?

+0

プロジェクトのMaven依存関係ツリーを印刷しましたか? – Siddharth

+0

はい。 'mvn dependency:tree'は、pomに宣言されていなくても、' my-service'の直接の依存関係として 'h2'を表示します。 – tytk

+0

これは、h2がmy-serviceの依存関係であるmy-libsの依存関係であることを示しています。 h2はtransitve依存関係と呼ばれます。ですから、あなたはmy-libs pomファイルを調べる必要があります。これは、my-serviceのあなたがh2をバージョン1.3.168で宣言していたのに対し、enforcer-ruleの原因である1.4.190の宣言であることを示しています....あなたはmy-libsを最初にチェックしてください。依存関係の管理.... – khmarbaise

答えて

1

h2の依存関係が親のpom(親のmy-service)から引き出されていることがわかりました。 mvn dependency:treeは、my-service pomで宣言されるべきであることを意味していたmy-serviceへの直接の依存として、h2を示すように欺かれていました。 my-service pomではそれが解読されませんでしたが、親のpomで宣言されました。それは競合するバージョンがどこから来たかです。

指定されたバージョンのmy-service pomにあるh2を宣言すると、上限の依存関係エラーが修正されました。

関連する問題