2013-04-04 60 views
1

我想在我的戰爭中包含(maven)依賴關係,同時確保它們在運行時或測試範圍內爲而不是我如何僅在我的戰爭中包含依賴關係?

的問題如下:

  1. 有一些罐子(假設罐子A,B和C),我需要在我的戰爭。這是因爲使用了CDI。

  2. 我有一些使用項目產生的戰爭的集成測試。這些集成測試是基於arquillian的測試。

  3. 但是,我有其他的測試是而不是集成測試,將受到在類路徑中包括罐子A,B和C的不利影響。

+3

請參閱主要選項[此處](http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope)。似乎沒有人做你想做的事。 – OldCurmudgeon 2013-04-04 13:02:30

+0

沒有選擇去做你想做的事情,無論如何不要在'test'範圍內想要某些東西。也許如果你發佈了你實際想要達到的目標,也許有人可能會提供一個解決方案。 – 2013-04-04 13:05:35

+0

@JarrodRoberson謝謝!你可以提交它作爲答案,所以我可以將其標記爲這樣嗎?至於是否有意義,請告訴我如何在沒有相關性影響其他測試的情況下爲arquillian測試創建一場戰爭? – Marco 2013-04-04 13:07:14

回答

0

不錯的選擇

啊哈!通過使用surefire插件,可以從測試階段中排除某些依賴項。這在StackOverflow answer中有描述。

這樣我就可以創建我的戰爭並且不在測試範圍內擁有依賴關係(感謝Peter Mularien)!

壞選項

它看起來像Maven的組裝插件需要你有任何include依賴於依賴範圍也可提供。由於test是最小的作用域,因此不可能在戰爭中包含依賴項,而不能在項目的測試範圍內使用它。

maven war插件不允許包含(或排除)依賴項。

另一種選擇是創建第二個「分佈」模塊,在其中包含所需的依賴關係。然而,這意味着arquillian測試正在引用之前的版本的戰爭 - 這也不是理想的。

另一種選擇是使用Shrinkwrap創建一個包含測試的JVM並運行JVM以運行「測試」JAR-我之前完成了這個任務,當時我需要用多個ORM測試我的代碼(否則,例如,OpenJPA在你的路徑中與在你的路徑中有Hibernate衝突)。但是,這會將您的測試與測試框架(JUnit,TestNG等)斷開連接,並使測試難以調試。

0

您有幾種選擇屬性:運行時,測試,編譯等

例如:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
    <version>${org.slf4j.version}</version> 
    <scope>runtime</scope> 
</dependency> 

更多,你可以閱讀here

+0

不幸的是,* runtime * scope意味着依賴項也可以在* test *作用域中使用。請重新閱讀這個問題! – Marco 2013-04-04 13:02:00

0

您可以在下面的依賴項部分指定範圍。它可以被稱爲測試,編譯或運行時。

<dependency> 
     <groupId>org.springframework.integration</groupId> 
     <artifactId>org.springframework.integration.adapter</artifactId> 
     <version>1.0.3.RELEASE</version> 
     <scope>runtime</scope>    
    </dependency> 

希望這會有所幫助。 謝謝,KJ

+0

正如我上面提到的那樣,* runtime * scope意味着依賴關係也可以在* test *作用域中使用,這正是我不想要的。 – Marco 2013-04-04 13:03:00

4

war不是一個依賴範圍。有效範圍爲provided,compile,runtime,test,system。您只能選擇其中的一個,它們是唯一的選項,它們都不會從test範圍中排除。

相關問題