其中一个测试使用了本地库:
System.loadLibrary("mylib");
libmylib.so
位于/usr/local/lib
,所以我在配置VM选项中添加了该目录:-Djava.library.path=/usr/local/lib
但是,当我使用Maven运行测试时,这一行会抛出UnsatisfiedLinkError
异常:
java.library.path
中没有mylib
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选项中设置库路径:设置 -> 构建、执行、部署 -> 构建工具 -> Maven -> 运行器 -> VM选项。此选项对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`?