我使用jni来调用.so(共享库)。
在执行环境中一切顺利。
但我想对它们进行一些单元测试。
我有一个libCBareme.so,它依赖于libUtil_Cade.so
我将maven2.1与surefire插件一起使用,并添加到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"));路径是可以的,您可以在下一个日志中看到。
但当我启动测试时,我得到了:
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,因为这是单元测试,所以我不想依赖于平台。
有人有办法解决这个问题吗?
非常感谢
我只是试试这个:
<configuration>
<forkMode>once</forkMode>
<workingDirectory>target</workingDirectory>
<environmentVariables>
<LD_LIBRARY_PATH>${project.basedir}/src/test/resources/om_lib/</LD_LIBRARY_PATH>
</environmentVariables>
</configuration>
而且它似乎起作用了!
但在windows上它不起作用,我看到我需要用如下的PATH替换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下那样添加:(
有人发现这个问题了吗?
如果它能帮助