我有一个使用 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>