Java:LD_LIBRARY_PATH可以访问类路径吗?

时间:2016-11-29 21:14:00

标签: java

我的[多模块maven]项目在lib文件夹中有一堆二进制文件

enter image description here

我通过设置LD_LIBRARY_PATH

加载maven
<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <!--<forkMode>true</forkMode>-->
                <useSystemClassLoader>true</useSystemClassLoader>
                <environmentVariables>
                    <LD_LIBRARY_PATH>${basedir}/lib/</LD_LIBRARY_PATH>
                    <DYLD_LIBRARY_PATH>${basedir}/lib/</DYLD_LIBRARY_PATH>
                </environmentVariables>
            </configuration>
        </plugin>
    </plugins>
</build>

我希望通过将它们包含为java依赖项来摆脱这些二进制文件(而不是在repo中检查它们)。所以我创建了一个包含这些二进制文件的jar文件,并作为依赖项添加:

enter image description here

不,我不确定如何设置LD_LIBRARY_PATH指向这些文件。我尝试了几种变体,但对于所有这些变种,库都抱怨没有找到这些二进制文件。

<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <!--<forkMode>true</forkMode>-->
                <useSystemClassLoader>true</useSystemClassLoader>
                <environmentVariables>
                    <LD_LIBRARY_PATH>lib/</LD_LIBRARY_PATH>
                    <DYLD_LIBRARY_PATH>lib/</DYLD_LIBRARY_PATH>
                </environmentVariables>
            </configuration>
        </plugin>
    </plugins>
</build>

我哪里错了?

1 个答案:

答案 0 :(得分:1)

您注释掉了forking指令。一旦您的JVM运行,您就无法追溯地重新配置它。

加载路径的配置不是动态的,因此启动运行Maven的JVM不会获得LD_LIBRARY_PATH和其他指令。如果没有forking指令,就不会启动新的JVM,因此这些指令实际上没有做任何事情。

启用分叉后,将按照您的指定配置启动的子JVM,以便它们具有预期的行为。

由于您认为这些项目会被加载,因此您的其余问题将基于错误的前提。你可能会感觉更好&#34;修复&#34;分叉问题,重新测试,然后重新描述新环境下的(可能的)新问题。