2010-11-19 107 views
32

Maven的surefire(測試)插件將src/test/resources中的文件複製到目標/測試類。它在src/test/java中編譯.java,並將編譯後的.class文件複製到target/test-classes。Maven(surefire):從src/test/java複製測試資源

但是它並不複製src/test/java中的資源,並且能夠將測試資源放在與它們作爲資源的.java類相同的目錄中,比在src中的並行層次結構中更方便/測試/資源。

是否有可能獲得maven從src/test/java複製資源?

+3

您可以配置Maven來做到這一點,但它是在一般的「更方便」遵循慣例,把資源文件Maven認爲他們應該是的。 – Thilo 2010-11-19 02:03:26

+0

但單元約定是將dbunit xml文件放在與使用它們的測試相同的目錄中。坦率地說,這對我的團隊來說會更容易。這整個意義在於減少編寫dbunit測試的痛苦,這些單元確實令人欽佩。 – tpdi 2010-11-19 04:40:45

回答

18

資源複製全部由maven-resource-plugin完成,如果您閱讀了其中的文檔,您將看到如何從src/test/java添加資源複製。

有關測試資源目標的信息,請參閱http://maven.apache.org/plugins/maven-resources-plugin/testResources-mojo.html,它包含在默認生命週期中。

然後請參閱http://maven.apache.org/pom.html,並查找<testResources>

+0

謝謝。但我還是有點不清楚。我發現我可以在中包含標記,但要複製* test *資源,我需要爲插件添加一些內容? – tpdi 2010-11-19 01:39:25

+0

@tpdi請參閱編輯。 – bmargulies 2010-11-19 01:43:06

0

是否有可能讓maven從src/test/java複製 資源?

是的,這可以通過antrun plugin輕鬆實現。

+0

與添加到testResources相比,我會稱之爲'簡單'。 – bmargulies 2010-11-19 01:43:21

28

bmargulies給出了答案,但讓我填寫一些細節。

<testresources>可以添加到maven的POM的<build>節點,就像這樣:

<testResources> 
    <testResource> 
    <directory>${project.basedir}/src/test/java</directory> 
    </testResource> 
</testResources> 

那份一切的src/test/java下 - 包括.java源代碼,這是我們不想。

它也(如bmargulies只暗示)覆蓋並替換標準父POM中默認的<testResources>設置,即所有其他POM繼承(除非該繼承已更改)。標準父節點複製src/test/resources,因此通過覆蓋它,我們不會像往常那樣複製,我們不希望這樣做。 (特別是,我這樣做的全部原因是使用單元,它希望將單元.properties文件複製 - 這對於src/test/resources是(對我來說)。

因此,我們重新添加src /測試/資源:

<testResources> 
    <testResource> 
    <directory>${project.basedir}/src/test/java</directory> 
    </testResource> 
    <testResource> 
    <directory>${project.basedir}/src/test/resources</directory> 
    </testResource> 
</testResources> 

,在順序拷貝上市,所以,對於文件中都存在/ src目錄/ test/java下(和子目錄)和/ src目錄/測試/資源(和子目錄) src/test/resources版本是測試類中的最後一個。

現在我們只需要而不是複製.java文件:

<testResources> 
    <testResource> 
    <directory>${project.basedir}/src/test/java</directory> 
    <excludes> 
     <exclude>**/*.java</exclude> 
    </excludes> 
    </testResource> 
    <testResource> 
    <directory>${project.basedir}/src/test/resources</directory> 
    </testResource> 
</testResources> 
1

當我將測試配置放入src/test/resources文件夾(src/test/java模擬源文件)時,它對我來說是唯一的方法。在測試執行過程中,將此文件夾中的文件複製到類路徑上的target/test-classes文件夾中。我不知道爲什麼,但接下來的配置並沒有爲我工作:

<testResources> 
    <testResource> 
    <directory>${project.basedir}/src/test/java</directory> 
    <excludes> 
     <exclude>**/*.java</exclude> 
    </excludes> 
    </testResource> 
    <testResource> 
    <directory>${project.basedir}/src/test/resources</directory> 
    </testResource> 
</testResources>