我使用jni来调用.so(共享库)。
在执行环境中一切正常。
但是我想对它们添加一些单元测试。
我有一个依赖于libUtil_Cade.so的libCBareme.so
我使用maven2.2.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,因为它是单元测试所以我不想依赖于平台。
有人有想法解决这个问题吗?
非常感谢
答案 0 :(得分:0)
我试试这个:
<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下那样添加:(
有人找到了这个问题吗?
我发布这个作为答案,如果它可以帮助