2016-05-16 47 views
1

我有一個由父POM和多個子模塊組成的Maven項目。它在Intellij中編譯並運行正常(我假設它使用javac而不是Maven)。Maven拉入POM中未指定的依賴關係

當我運行maven clean install,構建失敗,因爲「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的直接依賴,但它不是在任何勁歌,模塊或父母宣佈爲。 h2應該只來自my-libs。此外,它聲稱h2被「管理」爲版本1.3.168。我不知道它在哪裏得到這些信息。使用h2版本1.4.190

我試着開始與一個完全新鮮的.m2目錄,從my-libs依賴排除h2,明確包括my-serviceh2(兩個版本)。沒有任何工作,並且從依賴關係中排除h2,結果爲NoSuchPropertyException,其中一個與數據庫交互的類(通過JDBI)。

如何讓maven識別h2的正確版本以包含併成功構建我的項目?

+0

您是否嘗試打印項目的Maven依賴關係樹? – Siddharth

+0

是的。 'mvn dependency:tree'顯示'h2'是'my-service'的一個直接依賴,即使它沒有在pom中聲明。 – tytk

+0

它表明h2是my-libs的依賴關係,這是my-service的依賴關係。 h2被稱爲transitve依賴。所以你需要看一下my-libs pom文件。這表明你在我的服務中聲明h2版本爲1.3.168,而聲明爲1.4.190,這是執行者規則的原因....你應該首先檢查my-libs,它是父母...搜索for dependencyManagement .... – khmarbaise

回答

1

我發現h2依賴正在從父pom(my-service的父親)中提取。 mvn dependency:tree是騙人的,因爲它顯示h2作爲my-service的直接依賴關係,這在我看來意味着它應該在my-service pom中聲明。它在my-service pom中沒有被挖空 - 但是,它在父pom中被聲明。這是衝突版本的來源。

my-service pom中聲明h2 pom指定的版本修復了上限依賴關係錯誤。