在构建Netbeans / Ant Java项目时跨本机库(非jar)复制到dmg

时间:2018-07-16 07:49:53

标签: deployment netbeans-8

在我的NetBeans Java 8项目中,必须将一些本机库复制到lib目录中。通过多次搜索尝试,我发现NetBeans无法通过GUI进行此操作。所以我添加了以下内容:

对于正常的本地构建并运行:

<condition property="isMac">
    <os family="mac" />
</condition>
<condition property="isWindows">
    <os family="windows" />
</condition>

<target name="-copy-win" if="${isWindows}">
    <echo message="copying windows libraries"/>
    <copy todir="${basedir}/dist/lib"> 
        <fileset dir="${basedir}/native" includes="**/*.dll"/>
    </copy> 
</target>  

<target name="-copy-mac" if="${isMac}">
    <echo message="copying mac libraries"/>
    <copy todir="${basedir}/dist/lib"> 
        <fileset dir="${basedir}/native" includes="**/*.dylib"/>
        <fileset dir="${basedir}/native" includes="**/*.so"/>
    </copy> 
</target>    
<target depends="-copy-win,-copy-mac" name="-pre-jfx-deploy"/>

对于“仅打包为图像”选项:

<target name="-post-jfx-deploy-mac" if="${isMac}"> 
    <copy todir="${basedir}/dist/bundles/MyApp.app/Contents/Java/lib"> 
        <fileset dir="${basedir}/native" includes="**/*.dylib"/> 
        <fileset dir="${basedir}/native" includes="**/*.so"/> 
    </copy> 
</target>    
<target name="-post-jfx-deploy-win" if="${isWindows}"> 
    <copy todir="${basedir}/dist/bundles/MyApp/app/lib"> 
        <fileset dir="${basedir}/native" includes="**/*.dll"/> 
    </copy> 
</target>    
<target depends="-post-jfx-deploy-mac, -post-jfx-deploy-win" name="-post-jfx-deploy"/>

但是对于打包为EXE / DMG而言,本机库不会被复制。我可以通过在fx:deploy中定义自己的build.xml任务来解决此问题,但这很麻烦,因为NetBeans已经在jfx-impl.xml中使用某些JavaScript创建了一个。

还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

最后,我认为我有一些工作。

  1. 在顶级项目目录中创建一个名为native的文件夹,并将您的dll和dylib放在其中。

然后在build.xml中输入

  1. 添加-copy-win和/或-copy-mac目标(如我在上述问题中所述)

  2. 添加两个目标:

    <target depends="-jfx-copylibs,-rebase-libs,jfx-deployment,-copy-win,-copy-mac" name="-post-jar"/>

    <target depends="-copy-win,-copy-mac" name="-pre-jfx-deploy"/>

第一个确保在netbeans中运行项目时将库复制到dist/lib,第二个确保在部署项目时将库复制到dist/lib

  1. -pre-init目录中<macrodef name="deploy-deploy">的整个宏jfx-impl.xml的内部添加目标nbproject,并将<property name="pp_deploy_fs2" value="lib${file.separator}*.jar"/>中的值更改为{{ 1}}

整个文件都在此gist中。

然后您可以使用以下代码加载本机库:

value="lib${file.separator}*.*