Loc*_*yer 5 java eclipse bash shell maven
我有一个外部库需要与我的java项目中的测试动态链接.该项目是使用maven设置的,我需要在eclipse中将以下内容添加到我的vm参数中,以便传递测试:
-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>
经过一些研究,我发现了解决我的问题的一个不错的方法。
\n\n在您的 Mavensettings.xml
文件中,您可以定义一个位置,localRepository
如果您未设置任何内容,则默认位置如下:
正如您所看到的,这至少与我尝试设置的目录的第一部分匹配:/Users/rob/.m2
由于动态链接是特定于操作系统的,因此您可能还需要为备用路径后缀设置配置文件。你可以这样做.pom
:
<profile>\n <id>OSX</id>\n <activation>\n <os>\n <family>mac</family>\n </os>\n </activation>\n <properties>\n <dynamic.libLoc>${settings.localRepository}/natives/dist/lib</dynamic.libLoc>\n </properties>\n</profile>\n
Run Code Online (Sandbox Code Playgroud)\n\n.pom
然后,您可以在要测试的项目中使用此属性。在插件类别下,您可以添加:
<plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-surefire-plugin</artifactId>\n <configuration>\n <argLine>-Djava.library.path=${dynamic.libLoc}</argLine>\n </configuration>\n</plugin>\n
Run Code Online (Sandbox Code Playgroud)\n\n现在,maven 可以运行这些测试,而无需用户指定动态链接库的位置。您还可以通过添加另一个配置文件来处理使用不同操作系统的用户。
\n\n注意:关于我<argLine>
之前的问题。我想我只是用错了它.pom