我使用jni调用.so (共享库)。
在执行环境中,所有工作都很好。
但是我想在它们上添加一些单元测试。
我有一个依赖于libUtil_Cade.so的libCBareme.so
我使用带有surefire插件的maven2.2.1,并在pom.xml文件中添加:
<configuration>
<forkMode>once</forkMode>
<workingDirectory>target</workingDirectory>
<argLine>-Djava.library.path=${project.basedir}/src/test/resources/om_lib/</argLine>
</configuration>我添加了System.out.println(System.getProperty("java.library.path"));,path是ok的,你可以在下一个日志中看到。
但当我启动测试时,我会得到:
TrtBaremeTest Time elapsed: 3.032 sec <<< ERROR!
java.lang.UnsatisfiedLinkError: /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libCBareme.so: libUtil_CADE.so: cannot open shared object file: No such file or directory在这个目录中,我有
ls /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/*.so /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libCBareme.so /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libUtil_CADE.so
为什么我的单元测试显示为cannot open shared object file?
我不会在%JAVA_HOME%\bin中添加.so,因为它是单元测试,所以我不想依赖于平台。
有人有办法解决这个问题吗?
非常感谢
发布于 2014-10-29 22:14:46
我只想试试这个:
<configuration>
<forkMode>once</forkMode>
<workingDirectory>target</workingDirectory>
<environmentVariables>
<LD_LIBRARY_PATH>${project.basedir}/src/test/resources/om_lib/</LD_LIBRARY_PATH>
</environmentVariables>
</configuration>而且它似乎起作用了!
但在windows上它不起作用,我看到我需要用路径替换LD_LIBRARY_PATH,如下所示:
<configuration>
<forkMode>once</forkMode>
<workingDirectory>target</workingDirectory>
<environmentVariables>
<PATH>${project.basedir}/src/test/resources/om_lib/</PATH>
</environmentVariables>
</configuration>在调试模式下,我看到正在设置环境变量PATH=d:\MarcoPolo\SVN\CASTOR_trunk\CTR_SCA\OutilsMetier..\OM_LIB_DLL
但是我放了一个system.out.println来查看我的java.library.path,我的路径不是像linux下那样添加:(
有没有人发现了这个问题?
我把这篇文章作为一个答案,如果它能帮上忙的话
https://stackoverflow.com/questions/26632003
复制相似问题