Maven を使用して、共有オブジェクト (.so) ファイルを含む JNI ライブラリをプロジェクトに追加したいと考えています。残念ながら、まだパブリック リポジトリには存在しないため、動作させるにはローカル リポジトリに自分でインストールする必要があるようです。
Maven のネイティブ部分をプロジェクトにバンドルして (最終的には copy-dependencies プラグインでエクスポートして) 組み込むにはどうすればよいですか。これは、.jar をパッケージ化した標準の J2SE アプリ (Web アプリではありません) ですか?
追加しようとしているライブラリはジュニックソケット念のため、知っておくと役立つかもしれません。.so (ネイティブ ライブラリ) コンポーネントと Java .jar コンポーネントがあります。
私は遭遇しましたmaven-nar-プラグインこれはネイティブ ビルドを対象としているようですが、サード パーティの JNI ライブラリをバンドルするのではなく、コードから JNI プロジェクトを構築することに重点を置いているようで、ジグソー パズルを組み立てることができません。
どうすればいいですか:
- これらをローカル リポジトリにインストールし、.jar を .so ライブラリに依存します。
- POM ファイルに依存関係 (.jar および .so) を含めます。
ありがとう。
ベストアンサー1
私のアプローチ:
.so
次のように、プラットフォーム固有の分類子を使用してファイルをリポジトリに配置しますsqlite3-3.7.9-linux-x86_64.so
。.so
必要なすべてのプラットフォームの依存関係を追加します。
<dependency>
<groupId>de.ch-werner</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.7.9</version>
<type>so</type>
<classifier>linux-x86_64</classifier>
</dependency>
この Maven アセンブリ プラグイン設定を使用して、すべてのネイティブ ライブラリをlib/native
dist のディレクトリに配置します。
<dependencySet>
<outputDirectory>lib/native</outputDirectory>
<outputFileNameMapping>${artifact.artifactId}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
<unpack>false</unpack>
<useProjectArtifact>false</useProjectArtifact>
<useStrictFiltering>false</useStrictFiltering>
<includes>
<include>*:*:dll:*</include>
<include>*:*:so:*</include>
<include>*:*:jnilib:*</include>
</includes>
</dependencySet>
使用このクラスアプリの起動時にライブラリをロードする(分類子の命名を次のように変更する予定)GNU トリプレット):
CtzJniUtils.loadJniLibsFromStandardPath(Launcher.class, "sqlite3")