我可以定义一个在 NetBeans 中使用 JNI 的库吗?
似乎库定义只允许罐子或文件夹。
构建应用程序时,如何确保 DLL 遵循 jar 文件?
似乎库定义只允许罐子或文件夹。
构建应用程序时,如何确保 DLL 遵循 jar 文件?
假设您指的是构建 NetBeans 平台应用程序(或模块),那么您可以将 DLL 放在“release/modules/lib/”文件夹中。这是每个平台常见问题解答:
此处的附加信息:
如果您问得更笼统,那么我认为大多数人将 DLL 打包在 jar 中,然后在应用程序启动时将其提取到临时位置。例如
如果这不是您要查找的内容,那么您需要提供有关您要执行的操作的更多信息。
netbeans 不会自己做,但由于它在幕后使用 ant,所以有一种解决方法。
jni
你应该在你的项目目录中创建一个名为的子目录c:\path\to\mynetbeansproject\jni
(标签build.xml
:</project>
<target name="-post-compile">
<copy todir="${dist.dir}/lib">
<fileset dir="jni" />
</copy>
</target>
然后像往常一样将 jar 文件添加到您的项目中。:)
当您从 netbeans(或从命令行)调用“Clean and Build”时,您插入的代码片段build.xml
将确保本机库遵循文件夹中的 jar 文件;jvm 将在与加载它们的 .jar 相同的目录中查找 .dll(.so、.jnilib)文件,因此它可以工作。dist/lib
ant
请注意,这不会让您的项目在 netbeans 中运行,因为……我不太确定发生了什么,但看起来库路径 ( LD_LIBRARY_PATH
) 不包括您的项目的库,而且我无法知道从netbeans中改变它。只需将您的本机库/Library/Java/Extensions
放在 mac os x 上,或者将它们存放c:\windows\system32
在 windows 下。如果您使用 64 位 jvm 运行 64 位 Windows,我不知道;如果您正在运行 linux,您可能知道将它们存放在哪里,但这/usr/lib/java
可能是一个不错的选择。
我在使用 NetBeans 7.0.1 时测试了以下解决方案并且它有效,但我不知道它是否也适用于早期版本。
该解决方案很简单,并且适用于每个 NetBeans 模块。因此,如果您有一个套件,请不要将其 JNI 文件放入套件项目中,而是将您想要的 JNI 文件放入模块本身中。做:
因此,将您的本机库放在your_project_dir/release/lib中。如果需要,您可以为所需的每个目标平台创建子目录,例如:your_project_dir/release/lib/amd64、 your_project_dir/release/lib/sparc32
要了解更多信息,请阅读: http ://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#jni
问候, marciowb.info