Java Project,包含适用于不同平台的本机库

时间:2012-01-27 20:18:25

标签: java eclipse

我有一个使用JOGL的java项目,因此需要为不同的平台包含不同的本机库。现在我想设置eclipse项目以自动选择正确的库。在.classpath文件中,您可以指定一个原生位置:

<classpathentry kind="lib" path="lib/jogl/jar/jogl.all.jar">
    <attributes>
        <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="de.yogularm.desktop/lib/jogl/windows-amd64"/>
    </attributes>
</classpathentry>

如果multiply classpathentries指定本机位置,Eclipse也会尝试为其他平台加载库并失败。

如何让eclipse选择目录?我希望尽可能简单地分享项目并为进一步的开发人员进行设置。

4 个答案:

答案 0 :(得分:4)

您可以创建多个.classpath文件(.classpath_Windows,.classpath_Linux等),然后创建指向名为“.classpath”的所需版本(Win / Lin / Mac)的符号链接
如果您想更改任何.classpath_XXXXXXX中的任何条目,则会出现此问题 - 然后您必须更新其他.classpath文件。

答案 1 :(得分:3)

Eclipse缺少您想要的功能。所以,你可以用Java做到这一点。

请致电System.loadLibrary,而不是致电System.load。这要求您编写代码以根据当前平台计算正确的路径名。您需要使用-D传递值来说出当前平台是什么,或者从文件中读取它。

这会从等式中删除java.library.path

如果您的JNI库具有依赖项,则还需要设置PATH,LD_LIBRARY_PATH或DYLD_LIBRARY_PATH。除非你采取进一步的步骤https://github.com/bimargulies/jni-origin-testbed。但是,对于Windows,使用延迟加载程序的必要操作不在那里。

答案 2 :(得分:-1)

我可能错了,但我认为本机库是DLL,共享对象等等,并且根本不会进入类路径。每个环境都有类似PATH变量之类的东西,需要包含本机库。用户可能需要进行一些配置(在Eclipse中,或通过环境变量)。

答案 3 :(得分:-1)

不在类路径,系统路径和属性java.library.path中搜索库。

在您的情况下,可能是自定义ClassLoader实施,尤其是findLibrary(..)loadLibrary(..)方法。这将允许根据检测到的OS选择合适的库。