我可以用maven-surefire-plugin设置DYLD_LIBRARY_PATH吗?

时间:2017-03-12 12:12:15

标签: macos maven

在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上设置此属性是否存在一般限制,或者我是否有办法解决此问题?

0 个答案:

没有答案