gpt4 book ai didi

java - 是否有可能始终将 -Djava.library.path 从 POM 文件内部传递给 Maven 测试?

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:54 31 4
gpt4 key购买 nike

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

最佳答案

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

在 maven 中你的 settings.xml文件,您可以为 localRepository 定义一个位置如果您什么都不设置,这里是默认值:

  • Unix/Mac OS X – ~/.m2
  • Windows – C:\Documents and Settings\用户名.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

关于java - 是否有可能始终将 -Djava.library.path 从 POM 文件内部传递给 Maven 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7854732/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com