2017-08-15 184 views
1

我試圖通過添加以下maven參數來運行我們的Maven單元測試時添加JVM classpath參數,將「dir」替換爲我所需的clasaspath。動態設置Maven Surefire JVM類路徑

MAVEN_OPTS = -cp 「目錄」

這正確,則得到的加入到Java參數

然而,我的 「目錄」 是永遠不會正確添加到類路徑中。 在classpath中所需的文件從來沒有發現,並與

ClassLoader cl = ClassLoader.getSystemClassLoader(); 
URL[] urls = ((URLClassLoader)cl).getURLs(); 

回答

1

打印出的類路徑有運行測試時使用的Maven和JVM上運行一個JVM之間的差異時,總是丟失。

surefire插件將產生自己的JVM來運行你的測試用例。默認情況下,將包括以下對JVM的類路徑:

  • 你的項目的類目錄
  • 你的項目的測試類目錄
  • 你的項目的依賴。

如果我已經正確地理解了您的問題,那麼您希望將另一個目錄添加到運行您的測試的JVM的類路徑中。如果是這樣,那麼你可以添加額外的類路徑條目就像這樣:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.20</version> 
    <configuration> 
     <additionalClasspathElements> 
     <additionalClasspathElement>path/to/your/additional/directory</additionalClasspathElement> 
     </additionalClasspathElements> 
    </configuration> 
</plugin> 

更多細節here

如果要動態地改變通過命令行參數使用的萬無一失JVM類路徑(如您的MAVEN_OPTS提及暗示),那麼你可以定義一個additionalClasspathElement這樣的...

<additionalClasspathElement>${additionalClasspathDir}</additionalClasspathElement> 

..然後像這樣調用Maven:

mvn test -DadditionalClasspathDir=path/to/your/additional/directory 
+0

是否有任何方法將變量添加到這些路徑中,形式如果maven操作?我們寧願在我們的pom文件中沒有硬編碼路徑 – Johng

+0

我已經更新了我的答案,以解決動態更改surefire插件使用的類路徑的要求。 surefire插件明確了它如何編寫它的類路徑,以及如果你想要的目錄不在項目的類路徑中,並且不能添加到它(使用[Maven Build Helper Plugin](http://www.mojohaus.org/build) -helper-maven-plugin /)例子),那麼使用'additionalClasspathElements'是你唯一的選擇。 – glytching

+0

工作,只需要將-D前綴添加到變量 – Johng