2016-03-22 1 views
0

私は既存のネイティブアプリケーションをラップして実行し、いくつかのJavaコードを持って、次ののEclipse:プラグインに含まれているフォルダを参照する環境変数を設定する

  1. を実行し、ユーザからのいくつかの入力を受け取り、提供するネイティブアプリケーションは、1

ネイティブアプリケーションのステップ2で生成された出力ファイルにいくつかのより多くの操作を実行ステップで撮影入力パラメータステップ2ではいくつかの動的ライブラリが必要です。したがって、Run Configurations - > Environmentの下では、以下の変数を設定してライブラリを参照しています。

DYLD_LIBRARY_PATH = ${project_loc}/path/to/libs 
DYLD_FALLBACK_LIBRARY_PATH = ${project_loc}/path/to/libs 

これまでのところすべて動作します。今では、自分のコードと既存のネイティブアプリケーションをEclipseプラグインとしてパッケージ化しました。私は次のエラーを取得プラグイン内のコードを実行しようとするたびに:私の理解に

dyld: Library not loaded: libsrcml.dylib 
Referenced from: workspace/Project/src/nativeApp 
Reason: image not found 

を、これは私が以前に私のEclipseの場所で参照{$のproject_locを}、設定した環境変数のために起こりますプロジェクトが保存されました。今では、私のコードはもはやそのプロジェクトに含まれていませんが、プラグインの中に含まれているので、変数のパスは機能しなくなりました。質問は、プラグイン内のフォルダを参照するパスを設定するにはどうすればいいですか?あるいは、Javaコード内でこれらの変数を動的にロードすることは可能ですか?

+0

おそらく、プラグインMANIFEST.MFの 'Bundle-NativeCode'エントリを使用して調べる必要があります。 –

答えて

0

path variablesは、ファイルシステム内の固定位置を指定するために使用されます。 Platform.getBundle("").getEntry("")

Bundle bundle = Platform.getBundle("your.bundle.id"); 
URL url = bundle.getEntry("yourDir/yourFile.txt"); 
File f = new File(FileLocator.resolve(url).toURI()); 

ケース2:あなたのリソースへのプラットフォームURL:

url = new URL("platform:/plugin/your.bundle.id/yourDir/yourFile.txt"); 
File f = new File(FileLocator.resolve(url).toURI()); 
プラグイン内のリソースを識別するために

、私は

ケース1そのURLを使用します

このチップのVogellaに感謝します。

ただし、プラグインのライブラリの場合はですが、System.loadLibrary("libname")はlibを解決できなければなりません。

プラグインでネイティブライブラリを配布して使用する場合は、圧縮されたjarファイルではなく、ディレクトリとしてプラグインをパッケージ化してください。 だからあなたのプラグインのMANIFEST.MFを編集し、その後、あなたのEclipse-BundleShape: dir

Eclipse-BundleShape: dir 

を設定し、あなたのプラグインがフォルダとしてパッケージ化され、相互作用し、あなたのネイティブライブラリを作るためにあなたの責任です。通常、これは、ネイティブライブラリが互いにどのようにリンクしているか、Java-to-nativeフレームワークが検索パスを設定しているかによって異なります。

私の単純な解決策では、は、Java実行ディレクトリであるEclipse実行可能ファイルのルートフォルダにすべてのネイティブライブラリを置いているので、 "user"を使ってそのパスを取得できます。DIR」環境変数を次のように

System.getProperty("user.dir"); 

を次に、すべての原住民が同じフォルダ内にあるとき、彼らは問題なく相互に参照することができます

してください、またこれらのリソースを確認してください。

+0

あなたが提供したリソースを見て、私は 'System.loadLibrary(" libname ")'がそれを参照する方法でライブラリをバンドルすることができました。 しかし、それは私がエラーメッセージ 'dyld:Library not loaded:libsrcml.dylib Reason:image not found'を取得して以来、ネイティブのアプリはまだそれを見つけることができないようです。 Eclipse実行可能ファイルのルートフォルダ_とは何を意味するのかを明確にすることができますか?またそこからlibsを参照する方法は? –

+0

eclipse実行可能ファイルのルート・フォルダーはeclipse.exeを含むディレクトリーです。開発時には、Eclipse IDEが格納されているフォルダです。しかし、Eclipse RCP製品をビルドして出荷している場合、それは "product" .exeファイルを含むフォルダです。これが明確かどうかを教えてください。そうすれば、私は応答を更新できます。 – psuzzi

+0

明らかですが、標準のEclipseインストールでプラグインが使用されている場合にも機能するソリューションを探したいと思います。 –

関連する問題