20

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

Mavenにネイティブ部分を含めてプロジェクトにバンドルする(そして最終的にはコピー依存関係プラグインでエクスポートする)にはどうすればよいですか?これは標準のJ2SEアプリ(Webアプリではありません)で、.jarがパッケージ化されていますか?

私が追加しようとしているライブラリは、知っておくと役立つ場合に備えて、junixsocketです。.so(ネイティブライブラリ)コンポーネントとJava.jarコンポーネントがあります。

ネイティブビルドをターゲットにしているように見えるmaven-nar-pluginに出くわしましたが、サードパーティのJNIライブラリをバンドルするのではなく、コードからJNIプロジェクトをビルドすることを目的としているようで、ジグソーパズルをつなぎ合わせることができません。 。

どうすればよいですか:

  1. これらをローカルリポジトリにインストールします。.soライブラリに応じて.jarを使用します。
  2. POMファイルに(.jarおよび.soへの)依存関係を含めます。

ありがとう。

4

3 に答える 3

11

私のアプローチ:

.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")
于 2012-04-10T21:10:52.690 に答える
5

jar に .so を含め、ロードする前にプラットフォーム固有の共有ライブラリを追加します。このようにして、他の jar と同じようにデプロイされます。

異なるプラットフォーム用に複数の .so を使用してこれが行われるプロジェクトの例は、 https://github.com/peter-lawrey/Java-Thread-Affinityです。

注目すべきメイン クラスはhttps://github.com/peter-lawrey/Java-Thread-Affinity/blob/master/src/main/java/com/higherfrequencytrading/affinity/impl/NativeAffinity.javaです。

于 2012-04-09T09:46:22.937 に答える
0

ライブラリを実行時にアンパックする代わりに、Maven に jar として保存し、ビルド時にアンパックすることもできます: http://www.buildanddeploy.com/node/17

maven-nativedependencies-pluginプラグインは、命名規則に従っている限り、これを自動的に行います。

于 2012-04-09T10:55:42.840 に答える