我有一个外部库需要与我的java项目中的测试动态链接。该项目是使用maven设置的,我需要在eclipse中将以下内容添加到我的vm参数中以便传递测试:
-Djava.library.path=${env_var:HOME}/.m2/repository/natives/dist/lib -ea
不幸的是,这意味着使用:mvn test
从maven运行测试将始终失败。
一种解决方法是使用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>
答案 0 :(得分:3)
经过一番研究后,我发现了一个解决问题的好方法。
在您的settings.xml
文件中,您可以为localRepository
定义一个位置,如果您没有设置,这里是默认值:
正如您所看到的,这至少匹配我尝试设置的目录的第一部分:/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