Macos 我可以用maven surefire插件设置DYLD_库_路径吗?
在Java项目中,我依赖于第三方本机库,该库通过Macos 我可以用maven surefire插件设置DYLD_库_路径吗?,macos,maven,Macos,Maven,在Java项目中,我依赖于第三方本机库,该库通过DYLD\u library\u PATH加载依赖性dylib。我已经通过Tycho的surefire插件成功地运行了测试,方法是使用插件配置的environmentVariables属性进行设置,但是在非OSGi项目中类似的设置使DYLD\u LIBRARY\u PATH变量未设置 下面是我的Tycho功能配置的一个片段: <plugin> <groupId>org.eclipse.tycho</groupI
DYLD\u library\u PATH
加载依赖性dylib。我已经通过Tycho的surefire插件成功地运行了测试,方法是使用插件配置的environmentVariables
属性进行设置,但是在非OSGi项目中类似的设置使DYLD\u LIBRARY\u 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\u library\u PATH”)
返回null
<但是,code>System.getenv(“OtherVar”),返回“bar”
,因此设置环境变量通常是可行的。这让我怀疑DYLD\u LIBRARY\u PATH
(同样的情况也发生在LD\u LIBRARY\u PATH
,但不是PATH
)
在Eclipse中运行时(按原样运行或在运行配置环境中也设置了路径)和通过命令行运行时(也可以按原样运行或在运行前显式导出环境变量),行为相同。Tycho和非Tycho项目使用相同的工具(测试插件除外)在同一台机器上运行。我正在使用macOS 10.12.3、Java1.8.0_111和Maven 3.3.9
至少在Mac上设置此属性有一般限制吗?或者我有办法解决这个问题吗?您是否尝试过使用-DDYLD_LIBRARY_PATH=myValue运行maven?好主意,但遗憾的是,这似乎没有效果。按照类似的思路,我还尝试通过
systemPropertyVariables
设置它,结果是相同的空值。因此,我在我的Linux上尝试了您的配置,它工作正常(使用LD_LIBRARY_PATH),所以可能我没有完全理解它。在pom中,我是否正确地假设您设置了${dylib program}
变量的值?我假设您希望环境变量在测试阶段获得其值,这是正确的吗?在这两个方面都是正确的:我最初在local.m2/settings.xml中设置了dylib程序属性,然后在项目pom中进行测试,我确实希望它在测试期间作为环境变量存在。我和你在Linux上看到的一样:它可以正常工作。Tycho surefire插件不知何故回避了Mac上的一些特殊情况。我认为本文可以解释观察到的差异:“在Mac OS X上,强烈反对使用DYLD_LIBRARY_PATH,特别是因为OS X 10.11不再在子进程中导出此环境变量。”
<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>