在POM文件内,是否有可能一直传递-Djava.library.path到maven测试中?

6
我有一个外部库需要与我的Java项目中的测试动态链接。该项目是使用Maven设置的,我需要在Eclipse中的VM参数中添加以下内容才能通过测试:
-Djava.library.path=${env_var:HOME}/.m2/repository/natives/dist/lib -ea
不幸的是,这意味着使用"mvn test"运行测试将始终失败。
一个解决方法是像这样调用带有"-DargLine"参数的"mvn":
mvn test -DargLine="-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea"
然而,显然这会因为针对我的机器而过于具体,所以不能直接将它放在POM文件中。我想要的是一种修改那个字符串的方式,以每台机器为基础,有点像第一行代码为Eclipse做的那样。
我也很好奇如何将其放入POM文件中。我尝试将其放在""标记内,但似乎不起作用,我错过了什么吗?
--Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea
1个回答

5
经过一些研究,我找到了一个不错的解决方案来解决我的问题。
在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中使用它了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接