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

时间:2011-10-21 20:10:52

标签: java eclipse bash shell maven

我有一个外部库需要与我的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>

1 个答案:

答案 0 :(得分:3)

经过一番研究后,我发现了一个解决问题的好方法。

在您的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

中使用它