web-dev-qa-db-ja.com

Eclipseを起動してネイティブライブラリを「Java.library.path」に追加する方法(オーバーライドする代わりに)

Java.library.pathに追加する必要があるネイティブライブラリを取得しました。 JVM引数-Djava.library.path = path ...を使用すると、必要に応じてパスを設定できます。

私の問題は、他のライブラリ(pentahoレポート)がデフォルトのJava.library.path(システムディレクトリなどを含む)に基づいてフォントを検索し、手動設定がデフォルトのパスをオーバーライドすることです。

だから、どうすればaddオーバーライドする代わりにデフォルトのJava.library.pathへのパスエントリ(-Djava.library.pathで行われているようです)ができますか? (デフォルトのパスを手動で追加したくはありませんが、これはデプロイメントのために便利ではありません)

編集:詳細が欠落して申し訳ありません。 Eclipseを使用しています。 (展開はJNLPで行われ、そこでnativelibresourcesの下で使用できます)

89
Touko

この問題を忘れていました...私は実際にEclipseで尋ねていましたが、元々それを述べていないことを残念に思います。そして、答えは単純すぎるようです(少なくとも3.5では;おそらく古いバージョンでも):

Java実行構成の引数:VM引数:

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

引用符を忘れないでください。そうしないと、PATH内のスペースに問題があります。

46
Touko

Eclipseの開発時にJava.library.pathを妨げずにネイティブライブラリを追加する場合(絶対パスを含めたり、起動構成にパラメーターを追加したりするのを避けるため)、それぞれのネイティブライブラリの場所へのパスを指定できます。 Java Build Pathダイアログのネイティブライブラリの場所のjarネイティブライブラリのファイル名は、Jarファイル名に対応している必要があります。こちらもご覧ください 詳細な説明

14
Fabian Steeg

SWTは、必要なネイティブDLLをJARに入れます。例については、「org.Eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar」を検索してください。

DLLはJARのルートにあり、JARに署名する必要があり、DLLがそれらを選択するために、VMがMETA-INF/MANIFEST.MFにチェックサム付きで表示されている必要があります。アップ。

9
Aaron Digulla

Windowsでは、次のようになります。

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

%PATH%は古い-Djava.library.pathです

3
andy boot

https://bugs.Eclipse.org/bugs/show_bug.cgi?id=102239 は、Eclipseのランチャーには、少なくともJunoをリリースするまでの代替メカニズムは実装されていないと述べています。

したがって、Eclipseを起動するときに、デフォルト設定を事前に知らなくても、別のライブラリフォルダーをJava.library.pathに追加または追加することは(ほとんど)不可能です。

Eclipseを起動させ、Java.library.pathの内容をダンプし、Eclipseを1つのコマンドで停止できるようにする必要があるため、ほとんど書きました。ダンプは解析され、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}"
2
whaefelinger

UNIXシステムでは、LD_LIBRARY_PATH環境変数に追加できます。 Windowsでは、JVMはシステムプロパティJava.library.pathをPATHに自動的に設定します。 dllがPATHにある場合、設定されています。

1
geowa4

上記のコメントの1つでRob Elsnerが提供したソリューションは完全に機能します(OSX 10.9、Eclipse Kepler)。 「:」で区切られたパスに追加のパスを追加する必要があります。

$ {system_property:Java.library.path}を使用することもできます-ロブエルスナー10年11月22日23:01

1
Johan

「ウィンドウ」->「設定」->「Java」->「インストール済みJRE」。次に、現在のJRE(JDK)を選択して、[編集]をクリックします。デフォルトのVM引数を埋めます:-Djava.library.path =/usr/local/xuggler/lib。できた!

1
Vadym

System.load() を呼び出してネイティブライブラリをロードすることでこれを回避できますか?このメソッドは( System.loadLibrary() とは異なり)絶対パスを指定できます。

1
Simon Nickerson

何らかの理由で、複数のフォルダーを機能させることができませんでした(しばらくの間はそうでしたが、さらにDLLを追加し、フォルダーを追加したらすぐに、パスに空白がありません)。次に、必要なすべてのdllを1つのフォルダーにコピーし、それをJava.library.pathとしてコピーしました。私には説明がありません-誰かがそうするなら、それは素晴らしいでしょう。

0
Ustaman Sangat

ネイティブライブラリファイル名は、Jarファイル名に対応する必要があります。これは非常に重要です。 jar名とdll名が同じであることを確認してください。また、Fabian Steegからの投稿を参照してください。Jainのダウンロードには、dllとjarの異なる名前が含まれていました。これは、jawin.jarおよびjawind。dllでした。dllファイル名の余分な「d」に注意してください。 post http://www.eclipsezone.com/Eclipse/forums/t49342.html "

0
Dhana

既存の回答の多くは、特定のプロジェクトにこれを設定することを前提としていますが、Eclipseitselfに設定する必要があり、 SQL Server JDBCドライバー。

これを行うために、通常のランチャーの代わりにJavaコマンドラインからEclipseを起動するために これらの手順 に従いました。次に、そのスクリプトを変更して、-Djava.library.path引数をJavaコマンドラインに追加しました。

0
CrazyPyro