在Java项目中,我依赖第三方本机库,而第三方本机库又通过DYLD_LIBRARY_PATH
加载依赖dylib。我已成功通过Tycho的surefire插件运行测试,方法是使用插件配置的environmentVariables
属性进行设置,但非OSGi项目中的类似设置会使DYLD_LIBRARY_PATH
变量未设置。
以下是我的Tycho配置功能的片段:
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>0.25.0</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8 -Djava.library.path="${dylib-program}"</argLine>
<environmentVariables>
<DYLD_LIBRARY_PATH>${dylib-program}</DYLD_LIBRARY_PATH>
</environmentVariables>
</configuration>
</plugin>
这样,测试运行正确,输出System.getenv("DYLD_LIBRARY_PATH")
显示设置路径。
这是我的非Tycho配置中的等效代码段:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Dfile.encoding=UTF-8 -Djava.library.path="${dylib-program}"</argLine>
<environmentVariables>
<DYLD_LIBRARY_PATH>${dylib-program}</DYLD_LIBRARY_PATH>
<OtherVar>bar</OtherVar>
</environmentVariables>
</configuration>
</plugin>
然而,当我运行它时,依赖库无法正确加载,System.getenv("DYLD_LIBRARY_PATH")
返回null
。但是,System.getenv("OtherVar")
返回"bar"
,因此设置环境变量通常似乎有效。这让我怀疑DYLD_LIBRARY_PATH
有一些特殊的东西(LD_LIBRARY_PATH
也是如此,但不是PATH
)。
在Eclipse中运行时(原样或在运行配置环境中也设置了路径)和命令行(再次按原样运行或在运行前显式导出环境变量)时的行为相同)。 Tycho和非Tycho项目使用相同的工具(测试插件除外)在同一台机器上运行。我正在使用macOS 10.12.3,Java 1.8.0_111和Maven 3.3.9。
至少在Mac上设置此属性是否存在一般限制,或者我是否有办法解决此问题?