JNI和Java:ant调用make或者调用ant?

时间:2008-08-18 22:15:39

标签: java ant makefile java-native-interface automake

我正准备第一次进入JNI(Java Native Interface)世界,提供从平台特定的C / C ++代码到Java的文件系统更改通知。这是除非有人建议我做错了一些很棒的图书馆。

刚接触JNI我已经设法在它的接口端和它的库生成方面找到了很多文档,但是我没有找到很多关于构建本机库的文档。

我已经有一个基于ant的现有版本用于预先存在的Java源代码,所以我正在尝试解决是否应该使用ant调用make来创建库,或者是否最好让make调用创建库后蚂蚁?

这两个选项都没有跳出来,因为非常好,但两者似乎都比试图让ant调用编译器来编译代码并直接生成库更好。

5 个答案:

答案 0 :(得分:3)

我非常不喜欢制作,因为它隐含的规则集和对空格的处理。我个人会使用cpp任务(http://ant-contrib.sourceforge.net/cpptasks/index.html)来进行C编译。它们不像make那样灵活,但它们也不那么复杂,这意味着你不必为开发人员带来学习成果。

答案 1 :(得分:3)

作为JNI的一个更简单的替代方案,尝试JNA:https://jna.dev.java.net/,可以为您解决这个麻烦并且更简单(假设它可以做你想要的)。

答案 2 :(得分:1)

我完全跳过JNI,并使用外部程序在标准输出上写入通知。然后,Java可以简单地从程序输出流中读取并生成任何必要的事件。如果你想要的只是发送简单的通知,那么JNI太过分了。

此外,在Linux上你可以简单地启动“inotifywait”(使用一些合适的参数,参见“man inotifywait”)。

答案 3 :(得分:1)

我正在研究类似的东西。请注意,使用swig.org中的swig通常更容易,因为它会为您生成本机库的存根。

你的问题的简短回答是,在已经构建了java库之后,ant文件应该运行make文件,因为本机库依赖于swig生成的头,它是从java类文件生成的。

如果你对ant非常熟悉,并且不想学习新系统,那么http://ant-contrib.sourceforge.net/cpptasks/index.html也可以通过另一张海报链接,让你在ant中构建c ++。

答案 4 :(得分:0)

您还可以在Codemesh尝试terp C ++任务。它们不是免费的,但它们提供了高级抽象,能够发现/指定C ++编译器,并能够迭代多个平台构建的多个编译器/处理器架构/编译器配置。