其中一个测试使用了本地库:
System.loadLibrary("mylib");
libmylib.so
位于/usr/local/lib
,所以我在配置VM选项中添加这个目录:-Djava.library.path=/usr/local/lib
但是,当我使用 Maven 运行测试时,此行抛出 UnsatisfiedLinkError
:
no
mylib
injava.library.path
在没有这个选项的情况下调用 Java:
/usr/lib/jvm/java-8-oracle/bin/java -Dmaven.home=/opt/idea/plugins/maven/lib/maven3 -Dclassworlds.conf=/opt/idea/plugins/maven/lib/maven3/bin/m2.conf -Didea.launcher.port=7538 -Didea.launcher.bin.path=/opt/idea/bin -Dfile.encoding=UTF-8 -classpath /opt/idea/plugins/maven/lib/maven3/boot/plexus-classworlds-2.4.jar:/opt/idea/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher -Didea.version=15.0.3 test
捕获异常时打印 System.getProperty("java.library.path")
给出 /opt/idea/bin::/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
.显然,运行配置中的 VM 选项对 Maven 任务没有影响。
所以我尝试在 Maven 的 VM 选项中设置库路径:Settings->Build, Execution, Deployment->Build Tools->Maven->Runner->VM options。此选项对 java 调用命令有影响:
/usr/lib/jvm/java-8-oracle/bin/java -Djava.library.path=/usr/local/lib -Dmaven.home=/opt/idea/plugins/maven/lib/maven3 -Dclassworlds.conf=/opt/idea/plugins/maven/lib/maven3/bin/m2.conf -Didea.launcher.port=7539 -Didea.launcher.bin.path=/opt/idea/bin -Dfile.encoding=UTF-8 -classpath /opt/idea/plugins/maven/lib/maven3/boot/plexus-classworlds-2.4.jar:/opt/idea/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher -Didea.version=15.0.3 test
但即使现在使用此选项调用 Java,它仍然无法加载库,并且 System.getProperty("java.library.path")
仍然包含相同的内容!
如何为使用 Maven 调用的测试设置 java.library.path
?
最佳答案
您可以 add system properties to the maven-surefire-plugin
当测试在 systemPropertyVariables
的帮助下运行时属性:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<systemPropertyVariables>
<propertyName>java.library.path</propertyName>
<buildDirectory>/usr/local/lib</buildDirectory>
</systemPropertyVariables>
</configuration>
</plugin>
这将在运行测试时将 java.library.path
添加为系统属性。由于测试是在 fork 的 VM 中运行的,因此不会考虑您所做的修改。
关于java - 设置 java.library.path 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35366035/