96

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

我的问题是我的其他库(pentaho 报告)根据默认的 java.library.path(包括系统目录等)搜索字体,并且手动设置会覆盖默认路径。

所以:我怎样才能路径条目添加到默认的 java.library.path 而不是覆盖它(这似乎是用 -Djava.library.path 完成的)?(我不想手动添加默认路径,这对部署不利)

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

4

14 回答 14

49

忘记了这个问题......我实际上是在向 Eclipse 询问,很抱歉最初没有说明这一点。答案似乎太简单了(至少在 3.5 中;也可能在旧版本中):

Java 运行配置的参数:VM 参数:

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

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

于 2010-02-22T08:44:35.357 回答
14

如果您想在不干扰java.library.pathEclipse 的开发时添加本机库(以避免包含绝对路径和必须向启动配置添加参数),您可以在Java Build中为每个 Jar 提供本机库位置的路径本机库位置下的路径对话框。请注意,本机库文件名必须与 Jar 文件名相对应。另请参阅此详细说明

于 2010-01-24T18:48:42.010 回答
9

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

DLL 必须位于 JAR 的根目录中,必须对 JAR 进行签名,并且 DLL 必须与 META-INF/MANIFEST.MF 中的校验和一起出现,以便 VM 获取它们。

于 2009-03-19T08:45:18.797 回答
4

在 Windows 中,像这样:

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

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

于 2009-04-24T09:54:40.397 回答
2

您可以通过以编程方式调用System.load()来加载您的本机库来解决这个问题吗?此方法(与System.loadLibrary()不同)允许您指定绝对路径。

于 2009-03-19T08:36:20.423 回答
2

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

于 2009-09-09T01:01:48.653 回答
2

https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239声明在 Eclipse 的启动器中没有实现替代机制,至少在发布 Juno 之前没有实现。

因此,在没有事先了解默认设置的情况下启动 Eclipse 时,(几乎)不可能将另一个库文件夹附加或预先添加到 java.library.path。

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

#!/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}"
于 2014-02-21T14:17:22.033 回答
1

窗口->首选项->Java->已安装的 JRE。然后选择您当前的 JRE(JDK) 并单击编辑。填充默认 VM 参数:-Djava.library.path=/usr/local/xuggler/lib。完毕!

于 2010-11-26T08:20:10.550 回答
1

Rob Elsner 在上述评论之一中提供的解决方案完美运行(OSX 10.9,Eclipse Kepler)。必须将它们的附加路径附加到以“:”分隔的路径。

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

于 2014-07-15T11:44:04.627 回答
1
  1. 在 Windows 上:将库的路径添加到 PATH 环境变量。
  2. 在 Linux 上:将库的路径添加到 LD_LIBRARY_PATH 环境变量。
  3. 在 Mac 上:将库的路径添加到 DYLD_LIBRARY_PATH 环境变量。

java.library.path在其相应平台上使用上述变量的值进行初始化。

这应该适用于任何 IDE。

您可以通过调用来测试该值是否是您所期望的java -XshowSettings:properties

于 2020-05-19T22:05:52.283 回答
0

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

于 2010-07-09T07:25:24.660 回答
0

出于某种原因,我无法让多个文件夹工作(它确实有一段时间,但只要我需要更多 dll 并添加更多文件夹,路径中没有空格)。然后我将所有需要的 dll 复制到一个文件夹中,并将其作为我的java.library.path并且它有效。我没有解释-如果有人这样做,那就太好了。

于 2011-12-09T16:06:28.930 回答
0

许多现有答案假设您想为特定项目设置它,但我需要为 Eclipse本身设置它以支持 SQL Server JDBC 驱动程序的集成身份验证。

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

于 2014-03-26T22:28:06.407 回答
-2

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

于 2013-08-08T19:46:26.080 回答