【发布时间】:2016-02-12 15:17:04
【问题描述】:
其中一个测试使用原生库:
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 选项中设置库路径: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?
【问题讨论】:
-
您是否尝试过使用 LD_LIBRARY_PATH 环境。多变的 ?您是否也尝试过使用 System.load("/usr/local/lib/libmylib.so"); ?
-
是的,设置 LD_LIBRARY_PATH 确实有帮助!
标签: java maven testing java-native-interface