我有一個由父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
]
這似乎暗示h2
是my-service
的直接依賴,但它不是在任何勁歌,模塊或父母宣佈爲。 h2
應該只來自my-libs
。此外,它聲稱h2
被「管理」爲版本1.3.168
。我不知道它在哪裏得到這些信息。使用h2
版本1.4.190
。
我試着開始與一個完全新鮮的.m2
目錄,從my-libs
依賴排除h2
,明確包括my-service
下h2
(兩個版本)。沒有任何工作,並且從依賴關係中排除h2
,結果爲NoSuchPropertyException
,其中一個與數據庫交互的類(通過JDBI)。
如何讓maven識別h2
的正確版本以包含併成功構建我的項目?
您是否嘗試打印項目的Maven依賴關係樹? – Siddharth
是的。 'mvn dependency:tree'顯示'h2'是'my-service'的一個直接依賴,即使它沒有在pom中聲明。 – tytk
它表明h2是my-libs的依賴關係,這是my-service的依賴關係。 h2被稱爲transitve依賴。所以你需要看一下my-libs pom文件。這表明你在我的服務中聲明h2版本爲1.3.168,而聲明爲1.4.190,這是執行者規則的原因....你應該首先檢查my-libs,它是父母...搜索for dependencyManagement .... – khmarbaise