4

Java と Maven でネイティブ ライブラリを操作するための決定的で推奨される堅牢な方法があるかどうかを調べようとしています。

ライブラリを適切な場所に配置したり、構成java.library.pathして呼び出しSystem.loadLibraryたりすることでこれを実行できることはわかっていますが、開発/展開のライフサイクル全体で機能し、多くのハックを必要としない適切なソリューションが必要です。

私の要件はかなり単純に思えます:

  • Maven 経由で 100% 構成
  • さまざまなプラットフォーム/アーキテクチャのネイティブの依存関係を含める機能 (主に Linux と Windows、その他はいいと思いますが...)
  • ユーザーが実行するためにコマンド ライン オプションをいじる必要のない実行可能ファイルを作成する機能 (つまり、実行時に必要なネイティブの依存関係を、できれば一時ファイルなどとして展開してロード.jarます)
  • コードは開発中に機能します(Eclipseで)
  • コードは、コマンド ラインでの通常の Maven ビルド中に機能します。

基本的に、私はネイティブが開発中と実行時のユーザーの両方で機能することを望んでいます。

これは可能ですか?もしそうなら、それを実現するために何を設定する必要がありますか?

4

1 に答える 1

2

それは確かに可能です。同じ問題を解決する良い例は、 https: //bitbucket.org/xerial/sqlite-jdbc/overview の sqlite ラッパーです。

各アーキテクチャの事前定義されたパッケージ構造に従うことで、目的のネイティブ ライブラリをプログラムでクラス パスから一時フォルダーに抽出し、目的の java.library.path を設定してネイティブ ライブラリをロードできます。

  • すべてのネイティブ ライブラリは、src/main/resources フォルダーにパッケージ化されます。
  • 実行時に、OS、アーキテクチャを決定し、抽出する適切なネイティブ ライブラリを選択できるブートストラップ コードが必要です。
  • 同じブートストラップ コードで、ネイティブ ライブラリを一時フォルダーに抽出し、System.loadLibrary を呼び出すことができます。

上記のフローを個人的に実行しようとしたことはありませんが、他の方法は考えられませんでした。

于 2013-10-21T01:41:38.147 に答える