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