是否可以在POM文件中始终将-Djava.library.path传递给maven测试?

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>

Loc*_*yer 5

经过一些研究,我发现了解决我的问题的一个不错的方法。

\n\n

在您的 Mavensettings.xml文件中,您可以定义一个位置,localRepository如果您未设置任何内容,则默认位置如下:

\n\n
    \n
  • Unix/Mac OS X \xe2\x80\x93 ~/.m2
  • \n
  • Windows \xe2\x80\x93 C:\\Documents and Settings\\用户名.m2
  • \n
\n\n

正如您所看到的,这至少与我尝试设置的目录的第一部分匹配:/Users/rob/.m2

\n\n

由于动态链接是特定于操作系统的,因此您可能还需要为备用路径后缀设置配置文件。你可以这样做.pom

\n\n
<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然后,您可以在要测试的项目中使用此属性。在插件类别下,您可以添加:

\n\n
<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

\n