Maven依賴沒有順序
,但提供的scopes概念。
所以,你需要做的是,使用的範圍,以建立相關性集合權的內容:
- 編譯時
- 運行在服務器(使用例如
provided
的是需要的依賴在編譯時,但會由服務器來提供,所以您的應用程序/必須不包含他們
- 測試時間:使用
test
範圍增加(JUnit的舉例)
那些只需要進行測試的依賴
在你的特殊情況下,它看起來像javax.validation接口庫在測試中不是aviv。可能他們不會被包含在javaee-api
中。如果是這樣的話,再加入:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
<scope>test</scope>
</dependency>
但要小心,你的解釋,關於什麼是包含在服務器,並且所描述的行爲有些陌生。 - 我建議仔細檢查服務器提供的內容以及繼電器包含的內容。但可能我錯了,只需要javax.validation
測試明確
之所以問題只occoures當包括javaee-api
,可能是,那使用javax驗證有時只開啓,當實現在aviable類路徑。
在某些情況下依賴關係的順序。這個「問題」是,如果在兩個地方(直接和不正確)引用庫/依賴關係,並且引用同一個庫異常的版本,Maven必須決定使用哪個版本。
第一個也是最重要的標準是依賴樹中引用的深度。如果你直接在你的項目POM中引用庫,那麼這將是所有其他的。如果圖書館直接由您直接提供的圖書館提供,那麼這將主宰所有其他地方,這是一種更爲間接的方式。
但是,如果在依賴關係樹的相同深度中有兩個引用(對於不同版本中的同一個庫),第一個將會獲勝。 (more details)。
首先,
您使用的是什麼應用程序服務器,Jboss,Glassfish? – somid3 2011-04-12 16:52:22
單元測試時未涉及應用程序服務器,但該應用程序稍後將在JBoss 6中運行。 – atamanroman 2011-04-12 20:49:31