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


90

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

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

それで、デフォルトのjava.library.pathを上書きする代わりに、パスエントリをどのように追加できますか(-Djava.library.pathで行われているようです)?(デフォルトのパスを手動で追加する必要はありません。これは、デプロイメントのために適切ではありません)

編集:不足している詳細については申し訳ありません。私はEclipseを使用しています。(デプロイメントはJNLPで行われ、リソースの下でnativelibを使用できます )


1
PLSのではなく、この質問のために受け入れ答えを参照してください-私のためにそれははるかにましだ:stackoverflow.com/questions/957700/...
laher

「ネイティブライブラリを..に追加する方法」という質問は混乱を招きます。それはおそらく別の「ライブラリパス」を追加(追加または前に追加)することです。つまり、Eclipseがデフォルトでjava.library.path = path1:path2:path3のようなものを表示すると仮定すると、問題はEclipseをjava.libraryで開始する方法です。 .path = my / lib / folder:path1:path2:path3
whaefelinger 14

回答:


46

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

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

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

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


7
2つの共有ライブラリがあり、一方が他方に依存している場合、これは機能しません。1つ目はJavaランタイムによって検出されますが、2つ目はシステムのダイナミックローダーによって解決されます。私が見つけた唯一の解決策は、LD_LIBRARY_PATHを設定することです。
kevin cline、

4
@Toukoの回答は、ネイティブライブラリフォルダーの追加または前置に関する元の質問に適合しません。少なくともMac OS 10.8では、$ PATHも$ LD_LIBRARY_PATHも$ {workspace_loc:project} \ libもデフォルト値とは関係ありません。たとえば、私のMacのデフォルト値は$ HOME / Library / Java / Extensions:/ Library / Java / Extensions:/ Network / Library / Java / Extensions:/ System / Library / Java / Extensions:/ usr / lib / javaです。 :。
whaefelinger 14

EclipseでTestNGを使用している場合は、TestNG実行構成を編集する必要があります。-[実行構成]ウィンドウで、ターゲットTestNG構成を選択します。-[環境]タブを選択します-PATH変数を追加し、その値をターゲットに設定します-デフォルトの[環境をネイティブ環境に追加する]トグルのままにします。
フィリップ

例を挙げてもらえますか?
basickarl 2014年

@kevinclineはなぜその場合正確に機能しないのか、詳しく説明してもらえますか?私はその問題に遭遇したばかりで、このソリューションの何が問題なのかを理解しようとしています。
anula 2015

14

java.library.pathEclipseでの開発時に干渉せずにネイティブライブラリを追加する場合(絶対パスを含めたり、起動構成にパラメーターを追加したりする必要がないようにするため)、Javaビルドの各Jarのネイティブライブラリの場所へのパスを指定できます。ネイティブライブラリの場所の下にあるパスダイアログ。ネイティブライブラリファイル名は、Jarファイル名に対応している必要があることに注意してください。この詳細な説明も参照してください。


3
-1。エンドユーザーがIDEからアプリケーションを実行していることを想定していますが、これはほとんどありません。
2010年

@finnw私はあなたのポイントを理解しています。オーバーライドせずに、開発中にIDEにネイティブライブラリを追加する方法に関する解決策を探している質問をjava.library.path見つけ、他の場所で解決策を見つけた後に戻ってきました。それをより明確にするために私の答えを編集します。
Fabian Steeg、2010年

質問では触れていませんが、実際にはEclipseを使用しています。
Touko

ユーザーが質問の問題であると説明するようにプロパティを設定するとjava.library.pathがオーバーライドされるため、これは実際にはEclipse(Luna)の現在のバージョンでは機能しません。
Alex N.

9

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

DLLはJARのルートにある必要があり、JARは署名されている必要があり、DLLはチェックサムとともにMETA-INF / MANIFEST.MFに表示され、VMがそれらを取得できるようにする必要があります。


2
NetBeansでそれを行うにはどうすればよいですか?
Maciek Sawicki

AFAIK、NetBeansはAntを使用してプロジェクトをビルドします。Antのドキュメントを読んで、署名付きJARを作成する方法とDLLなどをマニフェストに入れる方法を読んでください。
アーロンディグラ2009

Eclipseで.dllを追加するように設定するにはどうすればよいですか?
NoBugs

@NoBugs:Eclipseでは、この投稿が役立つはずです:eclipsezone.com/eclipse/forums/t49342.html
アーロンディグラ

@AaronDigulla DLLは常にこの方法で接続されることをお勧めしますか?のようなものしか検索しないと思いましたjava.library.path。それだけの根を探ることをお勧めしますjarか?

4

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

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

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


このアイデアを試しましたが、結果はjava.library.path:D:\ Workspace \ myProject \ lib;%PATH%
Touko

$ {system_property:java.library.path}を使用することもできます
Rob Elsner

2
UNIX / Mac / GNU LinuxのデフォルトはLD_LIBRARY_PATHです。PATHはWindowsのものです。
whaefelinger 2013年


2

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}"

1

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


スレッドスターターは、2番目のネイティブライブラリフォルダーを「追加」する方法について非常に具体的でした。同意しませんか。
whaefelinger 2013年

@ user667073同じことを言っています... APPENDINGが問題です。スレッドスターターは共有
ライブラリ

STS 3.4.0およびMac OS 10.8:LD_LIBRARY_PATHの設定は、java.library.pathに影響を与えません。これをSubclipse / JavaHLでテストしました。これはうまくいきました:STS --launcher.appendVmargs -vmargs -Djava.library.path = / opt / local / lib while export LD_LIBRARY_PATH = / opt / local / lib; STSはネガティブでした。
whaefelinger 2014

1

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


1
スレッドスターターが「[..]をオーバーライドする代わりに、[..]ネイティブライブラリを追加する方法」について具体的に質問するため、この答えは役に立たない。この回答はデフォルト設定を上書きするだけです。
whaefelinger 14

1

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

$ {system_property:java.library.path}を使用することもできます– Rob Elsner 2010年11月22日23:01


0

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


問題は、Eclipseの起動時にネイティブライブラリ(フォルダー)を追加することです。
whaefelinger 2014

0

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


ええと、java.library.pathを介してネイティブライブラリが見つかり、別のライブラリをそのフォルダにコピーした場合、2番目のライブラリも見つかるのは当然のことですね。
whaefelinger

もちろん、それが私が使用した理由です。何を移動したりシンボリックリンクしたりせずに複数のフォルダを追加できるのかと思いました。
Ustaman Sangat

0

既存の回答の多くは、これを特定のプロジェクトに設定することを想定していますが、SQL Server JDBCドライバーの統合認証をサポートするために、Eclipse 自体に設定する必要がありました。

これを行うには、以下の手順に従って、通常のランチャーではなくJavaコマンドラインからEclipseを起動しました。次に、そのスクリプトを変更して、Javaコマンドラインに-Djava.library.path引数を追加しました。


0
  1. Windowsの場合:ライブラリへのパスをPATH環境変数に追加します。
  2. Linuxの場合:ライブラリへのパスをLD_LIBRARY_PATH環境変数に追加します。
  3. Macの場合:ライブラリへのパスをDYLD_LIBRARY_PATH環境変数に追加します。

java.library.path 対応するプラットフォームで上記の変数の値を使用して初期化されます。

これはどのIDEでも機能するはずです。

呼び出して、値が期待どおりかどうかをテストできます java -XshowSettings:properties


-2

Windowsで重要なことは、ネイティブDLLがPATHのディレクトリにある場合、スタートメニューやショートカットからではなく、コマンドラインからEclipse起動することです。どうやら、これは適切なディレクトリがパス上にあることを保証します。


私が間違っている場合は修正してください。DLL(または実行可能バイナリ)を検索すると、Windowsの現在の作業ディレクトリが自動的に含まれると思います。したがって、DLLがあるフォルダーに移動し、Eclipseを起動してから、はい、探しているDLLが見つかります。それとは別に、この答えはスレッドスターターの質問にどのように関連していますか?
whaefelinger 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.