0

我使用 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")); 并且路径没问题,您可以在下一个日志中看到。

但是当我启动测试时,我得到:

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 /数据/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libUtil_CADE.so

为什么我的单元测试说cannot open shared object file

我不会在 %JAVA_HOME%\bin 中添加 .so ,因为它是单元测试,所以我不想依赖于平台。

有人有解决这个问题的想法吗?

多谢

4

1 回答 1

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 下那样添加 :(

有人发现了这个问题吗?

如果有帮助,我将其发布为答案

于 2014-10-29T14:14:45.923 回答