maven-nar プラグインを使用してビルドおよびパッケージ化されたネイティブ共有ライブラリがあります。これはうまく機能し、Linux/MacOSX/Windows でビルドされます。また、共有ライブラリをラップする JNI ライブラリも定義しました。これも maven-nar を使用して構築されています。これらは両方とも NAR アーティファクトとして生成され、使用するには maven-nar プラグインが必要です。
この問題は、NAR パッケージ化されていないプロジェクトからこれらの NAR への依存関係を宣言するときに発生します。maven-nar プラグインが呼び出されないようです。プロジェクトのパッケージングを NAR に変更した場合にのみ、maven-nar プラグインが作動します。これにより、NAR 依存関係がある場合は、NAR パッケージが機能するために感染する必要があるように見えます。上流のすべてのプロジェクトは NAR パッケージ化する必要があります。これは正しいですか、それとも何か不足していますか?
maven-nar プラグインを使用して生成されたネイティブ共有ライブラリと JNI アーティファクトは、Web アプリケーション (つまり、WAR) で正常に使用できますか? それらをWARで使用および展開できる場合、それはどのように行われますか? それ以外の場合、ネイティブ ライブラリをアプリ サーバーの java.library.path のある場所に手動で配置する唯一のオプションはありますか?
NAR JNI アーティファクトに依存するプロジェクトの POM のスニペットを次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>thegroup</groupId>
<artifactId>theparent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>thedependant</artifactId>
<packaging>jar</packaging>
<name>A nice name</name>
...
<properties>
<skipTests>true</skipTests>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-nar-plugin</artifactId>
<version>2.1-SNAPSHOT</version>
</plugin>
</plugins>
</build>
...
<dependencies>
<dependency>
<groupId>thegoup</groupId>
<artifactId>theJNI</artifactId>
<version>1.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
</dependencies>
...
</project>