我想在我的戰爭中包含(maven)依賴關係,同時確保它們在運行時或測試範圍內爲而不是。我如何僅在我的戰爭中包含依賴關係?
的問題如下:
有一些罐子(假設罐子A,B和C),我需要在我的戰爭。這是因爲使用了CDI。
我有一些使用項目產生的戰爭的集成測試。這些集成測試是基於arquillian的測試。
但是,我有其他的測試是而不是集成測試,將受到在類路徑中包括罐子A,B和C的不利影響。
我想在我的戰爭中包含(maven)依賴關係,同時確保它們在運行時或測試範圍內爲而不是。我如何僅在我的戰爭中包含依賴關係?
的問題如下:
有一些罐子(假設罐子A,B和C),我需要在我的戰爭。這是因爲使用了CDI。
我有一些使用項目產生的戰爭的集成測試。這些集成測試是基於arquillian的測試。
但是,我有其他的測試是而不是集成測試,將受到在類路徑中包括罐子A,B和C的不利影響。
不錯的選擇:
啊哈!通過使用surefire插件,可以從測試階段中排除某些依賴項。這在StackOverflow answer中有描述。
這樣我就可以創建我的戰爭並且不在測試範圍內擁有依賴關係(感謝Peter Mularien)!
壞選項:
它看起來像Maven的組裝插件需要你有任何include
依賴於依賴範圍也可提供。由於test
是最小的作用域,因此不可能在戰爭中包含依賴項,而不能在項目的測試範圍內使用它。
maven war插件不允許包含(或排除)依賴項。
另一種選擇是創建第二個「分佈」模塊,在其中包含所需的依賴關係。然而,這意味着arquillian測試正在引用之前的版本的戰爭 - 這也不是理想的。
另一種選擇是使用Shrinkwrap創建一個包含測試的JVM並運行JVM以運行「測試」JAR-我之前完成了這個任務,當時我需要用多個ORM測試我的代碼(否則,例如,OpenJPA在你的路徑中與在你的路徑中有Hibernate衝突)。但是,這會將您的測試與測試框架(JUnit,TestNG等)斷開連接,並使測試難以調試。
您可以在下面的依賴項部分指定範圍。它可以被稱爲測試,編譯或運行時。
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>org.springframework.integration.adapter</artifactId>
<version>1.0.3.RELEASE</version>
<scope>runtime</scope>
</dependency>
希望這會有所幫助。 謝謝,KJ
正如我上面提到的那樣,* runtime * scope意味着依賴關係也可以在* test *作用域中使用,這正是我不想要的。 – Marco 2013-04-04 13:03:00
war
不是一個依賴範圍。有效範圍爲provided
,compile
,runtime
,test
,system
。您只能選擇其中的一個,它們是唯一的選項,它們都不會從test
範圍中排除。
請參閱主要選項[此處](http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope)。似乎沒有人做你想做的事。 – OldCurmudgeon 2013-04-04 13:02:30
沒有選擇去做你想做的事情,無論如何不要在'test'範圍內想要某些東西。也許如果你發佈了你實際想要達到的目標,也許有人可能會提供一個解決方案。 – 2013-04-04 13:05:35
@JarrodRoberson謝謝!你可以提交它作爲答案,所以我可以將其標記爲這樣嗎?至於是否有意義,請告訴我如何在沒有相關性影響其他測試的情況下爲arquillian測試創建一場戰爭? – Marco 2013-04-04 13:07:14