2011-10-21 24 views
5

我有一個外部庫,需要動態鏈接到我的Java項目中的測試。該項目是使用maven的設置,我需要添加以下到我的VM參數在Eclipse中的測試通過:是否可以始終將-Djava.library.path傳遞給POM文件中的maven測試?

-Djava.library.path=${env_var:HOME}/.m2/repository/natives/dist/lib -ea

不幸的是,這意味着利用Maven的運行測試:mvn test總是失敗。

一個解決方法是調用mvn-DargLine的說法,像這樣:

mvn test -DargLine="-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea"

然而,顯然這已經被我機器上的問題,所以我不能把它直接在pom文件。我想我正在尋找的是一種在每臺機器上修改該字符串的方式,就像第一行爲eclipse所做的一樣。

我也很好奇我怎麼可能把它放到POM文件,我試着將它的<argLine>標籤內,但是,這並不似乎工作,有什麼我失蹤:

<argLine>-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea</argLine>

回答

3

經過一番研究,我發現了一個體面的解決方案,我的問題。

在Maven中你settings.xml文件,你可以定義這裏的localRepository的位置是默認的,如果你什麼都不設置:

  • 的Unix/Mac OS X的 - 〜/ .m2目錄
  • 的Windows - C: \的Documents and Settings \ username.m2

正如你可以看到這至少目錄的第一部分相匹配,我想設置:/Users/rob/.m2

由於動態鏈接是操作系統特定的,因此您可能還需要爲備用路徑後綴設置配置文件。您可以在.pom這樣做:

<profile> 
    <id>OSX</id> 
     <activation> 
      <os> 
       <family>mac</family> 
      </os> 
     </activation> 
    <properties> 
     <dynamic.libLoc>${settings.localRepository}/natives/dist/lib</dynamic.libLoc> 
    </properties> 
</profile> 

然後可以使用在.pom此屬性爲要測試的項目。在插件類,您可以添加:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <argLine>-Djava.library.path=${dynamic.libLoc}</argLine> 
    </configuration> 
</plugin> 

現在Maven可以無需指定的動態鏈接庫的位置,用戶運行這些測試。您還可以通過添加其他配置文件來處理具有不同操作系統的用戶。

注意:關於我之前與<argLine>有關的問題。我想我只是在錯誤地使用它.pom

相關問題