我将创建一个使用 JNI 的 java 项目。我想将项目部署为独立应用程序,但某些模块也可能用作其他应用程序的库。我想支持不同的平台,一切都应该尽可能轻松。
据我所见,我可以在 maven-nar-plugin 和 native-maven-plugin 之间进行选择,它已经有一年半没有更新了,而 native-maven-plugin 对我来说似乎不太友好。
您对其中之一有任何经验或我应该使用的建议吗?
我将创建一个使用 JNI 的 java 项目。我想将项目部署为独立应用程序,但某些模块也可能用作其他应用程序的库。我想支持不同的平台,一切都应该尽可能轻松。
据我所见,我可以在 maven-nar-plugin 和 native-maven-plugin 之间进行选择,它已经有一年半没有更新了,而 native-maven-plugin 对我来说似乎不太友好。
您对其中之一有任何经验或我应该使用的建议吗?
我只将 maven-nar-plugin 用于独立的 C/C++ 应用程序,但它的效果非常好。
至于 JNI,几年来我一直在一个相当大的应用程序上使用 native-maven-plugin。我们使用它来允许我们的 Java 应用程序与仅提供 C API 的其他应用程序交互。我实际上发现它非常用户友好。该文档非常好,并解释了基本用法,但您仍然必须处理 C 编译器和链接器以及构建所需的任何选项。
我们只需将编译器和链接器命令和选项、源位置和 javah 文件位置传递给它,它就可以工作了。我不得不说,尽管我们在使用 JNI 时经历了所有的痛苦,但 maven 插件是为数不多的没有大麻烦的事情之一。
此演示文稿中关于 NAR 插件的第三张幻灯片由斯坦福线性加速器中心的 Mark Donszelmann 比较了 native-maven-plugin 和 maven-nar-plugin。引用幻灯片 3,native-maven-plugin 的优缺点:
优点
- 非常可配置
缺点
- 没有开箱即用(无默认值)
- 没有二进制依赖
- 不跨平台(不同平台不同配置文件)
一年以来,我使用了很多 native-maven-plugin 来交叉编译 C 和 C++ 源代码(每个平台选项的配置文件,如编译器、编译器选项、链接器选项等......)。它就像一种魅力,但在我的情况下我感到很孤独。现在,我不明白为什么 C/C++ 开发人员仍然使用其他时代的 make 或 cmake 工具。Maven 更适合管理版本和依赖项......