如何使用Eclipse启动将本地库添加到“java.library.path”(而不是覆盖它)

我有一个本地库需要被添加到java.library.path 。 使用JVM参数-Djava.library.path =path…我可以根据需要设置path。

我的问题是,我的其他库(pentaho报告)基于默认的java.library.path(包括系统目录等)search字体和手动设置覆盖默认path..

所以:我怎样才能添加一个path条目到默认的java.library.path而不是重写它(这似乎是用-Djava.library.path)? (我不想手动添加默认path,这对于部署而言不是很好)

编辑:遗憾的细节; 我正在使用Eclipse。 (部署是用JNLP完成的,我可以在资源下使用nativelib

已经忘记了这个问题…我实际上是要求与Eclipse,对不起,原来没有说明。 答案似乎太简单了(至less在3.5以上,可能还有旧版本):

Java运行configuration的参数:VM参数:

-Djava.library.path="${workspace_loc:project}\lib;${env_var:PATH}" 

不要忘记引号,否则PATH中的空格有问题。

如果要在Eclipse中添加本地库而不干扰java.library.path (避免包括绝对path并且必须将参数添加到启动configuration中),则可以为每个库的本地库位置提供path“本机库位置”下的“ Java构buildpath”对话框中的Jar。 请注意,本机库文件名必须对应于Jar文件名。 另请参阅此详细说明 。

SWT将必要的本地DLL放入JAR中。 search“org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar”作为例子。

DLL必须位于JAR的根目录下,必须对JAR进行签名,并且该DLL必须与META-INF / MANIFEST.MF中的校验和一起出现,供虚拟机选取。

在Windows中,像这样:

-Djava.library.path = “C:/ MyLibPath;%PATH%”

%PATH%是你旧的-Djava.library.path

https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239指出在Eclipse的启动器中没有实现替代机制,至less没有发布Juno。;

因此,在启动Eclipse的时候,在没有预先知道默认设置的情况下,几乎不可能将其他库文件夹追加或预先添加到java.library.path中。

我写的差不多,因为应该可以让Eclipse启动,转储java.library.path的内容,并停止Eclipse在一个命令。 转储将被parsing,然后作为启动Eclipse的input,即

 #!/bin/bash # get default value of java.library.path (somehow) default_lib_path=$( start_dump_stop_eclipse_somehow ) # now launch Eclipse eclipse --launcher.appendVmargs \ -vmargs \ -Djava.library.path="/my/native/lib/folder:${default_lib_path}" 

你可以通过以编程方式调用System.load()来加载你的本地库吗? 这个方法(不像System.loadLibrary() )允许你指定一个绝对path。

Window-> Preferences-> Java-> Installed JREs。 然后select您当前的JRE(JDK)并单击编辑。 填写默认虚拟机参数:-Djava.library.path = / usr / local / xuggler / lib。 完成!

Rob Elsner在上述评论中提供的解决scheme非常完美(OSX 10.9,Eclipse Kepler)。 一个人必须将他们的附加path追加到由“:”分隔的path。

你也可以使用$ {system_property:java.library.path} – Rob Elsner 11年10月22日在23:01

在UNIX系统中,可以追加到LD_LIBRARY_PATH环境variables。 在Windows上,JVM自动将系统属性java.library.path设置为PATH; 所以如果dll在你的PATH上,那么你就设置好了。

本机库文件名必须对应于Jar文件名。 这非常重要。 请确保jar名称和dll名称相同。 另外,请参阅Fabian Steeg的post我的jawin下载包含了dll和jar的不同名称。 这是jawin.jar和jawin d .dll,注意在dll文件名中额外的'd'。 我只是重命名为jawin.dll,并将其设置为eclipse中的本地库,如后“ http://www.eclipsezone.com/eclipse/forums/t49342.html

出于某种原因,我无法获得多个文件夹的工作(以及它做了一段时间,但只要我需要更多的DLL,并添加更多的文件夹,没有在path中的空白)。 然后,我将所有需要的dll复制到一个文件夹,并具有作为我的java.library.path ,它的工作。 我没有一个解释 – 如果有人这样做,这将是伟大的。

现有的许多答案都假设您要为特定的项目设置此选项,但是我需要将其设置为Eclipse 本身以支持SQL Server JDBC驱动程序的集成身份validation。

为此,我按照这些说明从Java命令行启动Eclipse,而不是正常的启动器。 然后,我修改了该脚本,将我的-Djava.library.path参数添加到Java命令行中。

在Windows上,我发现重要的是从命令行启动Eclipse,而不是从“开始”菜单或快捷方式启动Eclipse ,前提是本机DLL位于PATH中的目录中。 显然,这确保了正确的目录在path上。