2014-08-27 77 views
1

我有一個多模塊Maven項目(ModuleA,ModuleB,ModuleC)處理路徑在Eclipse和Maven

我ModuleA

@ContextConfiguration(locations = 
      { "file:../ModuleB/src/test/resources/application-context-test.xml", 
      "classpath:/mvc-dispatcher-servlet-test.xml" 
      }) 

從ModuleB的文件加載上下文中有一個測試。

當我在eclipse中運行測試它的作品。但是,當測試由maven運行時不會。

在eclipse中,當前路徑被設置爲ModuleA,但在maven中它被設置在父文件夾中。

所以我應該寫:

文件:../ModuleB/SRC /測試/資源/應用程序上下文: /ModuleB/src/test/resources/application-context-test.xml

INSEAD

文件的的test.xml

,使其工作在Maven的(但它會破壞蝕)

的感謝!

如何告訴maven(或surefire插件)運行相對於模塊路徑的單元測試而不是父級?

+0

爲什麼不使用'classpath'而不是'file'? – 2014-08-27 09:53:23

+0

我試過了:「classpath:/application-context-test.xml」,但似乎這個文件不在類路徑中。也許,如果我將它從ModuleB/src/main/resources /移動到classpath中... – jpprade 2014-08-27 10:06:12

+0

Aggh ...錯過它位於測試文件夾中。 – 2014-08-27 10:08:27

回答

0

添加這個,而不是一個正斜槓 - "classpath:application-context-test.xml"

Maven會自動從資源

+0

我沒有嘗試maven,但在日食它找不到它,我需要一個解決方案,在這兩個工作 – jpprade 2014-08-27 12:43:03

0

把它不管是什麼sotution,這是不是最好的實踐。

請做如下:

首先,確保如果模塊A denpends模塊B? (我猜是的)

如果是,請使用classpath:/application-context-test.xml,然後在父目錄下使用mvn install來打包模塊B並安裝它。那麼,你可以運行你的測試用例,它應該可以工作。

如果不是,請將application-context-test.xml複製到模塊A中,但我認爲這很奇怪。通常,如果你想使用其他模塊的文件,這是因爲這個模塊取決於它。

+0

是複製文件是我將要結束的事情。但最後希望我做到了:將surefire插件從2.16更新到2.17,並刪除以具有默認值,現在它似乎可以工作: – jpprade 2014-08-27 12:45:50

1

放置在${project.basedir}/src/test/resources中的文件被複制到默認情況下爲'target/test-classes'的${project.build.testOutputDirectory}。作爲generate-testResources階段的一部分,Maven自動執行此操作。

因此,您不想在/ src/test/resources目錄中查找文件,因爲它不在類路徑中。如果你有在ModuleB測試要查找的文件,你會寫這樣的:

@ContextConfiguration(locations = 
     { "classpath:/application-context-test.xml", 
     "classpath:/mvc-dispatcher-servlet-test.xml" 
     }) 

你碰到的困難是,你想要的文件中的另一項目中存在。所以你要解決的問題是,我如何從另一個項目獲取資源到這個項目的類路徑中?你可以做以下兩件事之一來解決這個問題:

一:在ModuleB中執行maven jar plugin's test-jar goal。這將獲取ModuleB的target/test-classes目錄中的所有類和資源,並將其打包成一個jar包。然後,您可以添加測試的水瓶中像這樣的模塊A的POM的依賴:

<dependency> 
    <groupId>com.mycompany.theGroupId</groupId> 
    <artifactId>moduleB</artifactId> 
    <version>yourVersion</version> 
    <type>test-jar</type> 
    <scope>test</scope> 
</dependency> 

二:您可以移動模塊B的測試資源投入到一個單獨的項目(目錄newProject/src/main/resources),讓Maven構建的水瓶中通常情況下,ModuleA和ModuleB都將newProject添加爲範圍爲test的依賴項。