ローカル Maven リポジトリに JNI ライブラリを追加する 質問する

ローカル Maven リポジトリに JNI ライブラリを追加する 質問する

Maven を使用して、共有オブジェクト (.so) ファイルを含む JNI ライブラリをプロジェクトに追加したいと考えています。残念ながら、まだパブリック リポジトリには存在しないため、動作させるにはローカル リポジトリに自分でインストールする必要があるようです。

Maven のネイティブ部分をプロジェクトにバンドルして (最終的には copy-dependencies プラグインでエクスポートして) 組み込むにはどうすればよいですか。これは、.jar をパッケージ化した標準の J2SE アプリ (Web アプリではありません) ですか?

追加しようとしているライブラリはジュニックソケット念のため、知っておくと役立つかもしれません。.so (ネイティブ ライブラリ) コンポーネントと Java .jar コンポーネントがあります。

私は遭遇しましたmaven-nar-プラグインこれはネイティブ ビルドを対象としているようですが、サード パーティの JNI ライブラリをバンドルするのではなく、コードから JNI プロジェクトを構築することに重点を置いているようで、ジグソー パズルを組み立てることができません。

どうすればいいですか:

  1. これらをローカル リポジトリにインストールし、.jar を .so ライブラリに依存します。
  2. 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/nativedist のディレクトリに配置します。

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

おすすめ記事