2011-10-21 23 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

相关问题