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

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

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

我已经有一个基于ant的已有的Java源代码的现有版本,所以我想弄清楚如果我应该使用ant调用make来创建库,或者如果最好让make在创建后调用ant图书馆?

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

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

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

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

此外,在Linux上,您只需启动“inotifywait”(使用一些合适的参数,请参阅“man inotifywait”)。

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

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

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

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