创建JavaFX可执行文件,包括JRE和外部库
我在NetBeans下开发了一个JavaFX应用程序,它需要JRE8u60和一些外部库(jar和dll)以及一个“SQLite”数据库文件来运行。我正在寻找一种创建可执行文件或安装程序的方法,其中包括(或安装)这个版本的JRE和所需的库 首先,我尝试使用NetBeans本机打包程序,如中所示,但当我运行安装程序时,可执行文件显示它找不到主类。我只是遵循了那个教程,所以我不知道我是否错过了一些适合我的特殊情况的要点。My build.xml文件:创建JavaFX可执行文件,包括JRE和外部库,java,netbeans,ant,jar,javafx,Java,Netbeans,Ant,Jar,Javafx,我在NetBeans下开发了一个JavaFX应用程序,它需要JRE8u60和一些外部库(jar和dll)以及一个“SQLite”数据库文件来运行。我正在寻找一种创建可执行文件或安装程序的方法,其中包括(或安装)这个版本的JRE和所需的库 首先,我尝试使用NetBeans本机打包程序,如中所示,但当我运行安装程序时,可执行文件显示它找不到主类。我只是遵循了那个教程,所以我不知道我是否错过了一些适合我的特殊情况的要点。My build.xml文件: <?xml version="1.0" en
<?xml version="1.0" encoding="UTF-8"?>
<project name="Petra" default="default" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
<description>Builds, tests, and runs the project Petra.</description>
<import file="nbproject/build-impl.xml"/>
<target name="-post-jfx-deploy">
<fx:deploy width="${javafx.run.width}" height="${javafx.run.height}"
nativeBundles="all"
outdir="${basedir}/${dist.dir}" outfile="${application.title}">
<fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
<fx:resources>
<fx:fileset dir="${basedir}/${dist.dir}" includes="Petra.jar"/>
</fx:resources>
<fx:info title="${application.title}" vendor="${application.vendor}"/>
<fx:platform basedir="C:\Program Files\Java\jdk1.8.0_60"/>
</fx:deploy>
</target>
</project>
构建、测试和运行项目Petra。
编译时,输出中似乎没有任何错误:
ant -f C:\\Users\\jros\\Documents\\NetBeansProjects\\Petra jfx-rebuild
init:
deps-clean:
Updating property file: C:\Users\jros\Documents\NetBeansProjects\Petra\build\built-clean.properties
Deleting directory C:\Users\jros\Documents\NetBeansProjects\Petra\build
clean:
init:
deps-jar:
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\build
Updating property file: C:\Users\jros\Documents\NetBeansProjects\Petra\build\built-jar.properties
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\build\empty
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\build\generated-sources\ap-source-output
Compiling 19 source files to C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Copying 26 files to C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
compile:
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\dist
Copying 3 files to C:\Users\jros\Documents\NetBeansProjects\Petra\dist\lib
Detected JavaFX Ant API version 1.3
Launching <fx:jar> task from C:\Program Files\Java\jdk1.8.0_60\jre\..\lib\ant-javafx.jar
Launching <fx:deploy> task from C:\Program Files\Java\jdk1.8.0_60\jre\..\lib\ant-javafx.jar
No base JDK. Package will use system JRE.
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist, files:[Petra.jar, lib\RXTXcomm.jar, lib\ojdbc6.jar, lib\sqlitejdbc-0.5.4.jar]}
No base JDK. Package will use system JRE.
Using base JDK at: C:\Program Files\Java\jdk1.8.0_60\jre
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist, files:[Petra.jar]}
Using base JDK at: C:\Program Files\Java\jdk1.8.0_60\jre
Creating app bundle: Petra in C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
Result application bundle: C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
Installer (.exe) saved to: C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist, files:[Petra.jar]}
jfx-deployment-script:
jfx-deployment:
jar:
jfx-rebuild:
BUILD SUCCESSFUL (total time: 3 minutes 31 seconds)
ant-fc:\\Users\\jros\\Documents\\NetBeansProjects\\Petra jfx rebuild
初始化:
清洁署署长:
更新属性文件:C:\Users\jros\Documents\NetBeansProjects\Petra\build\build-clean.properties
正在删除目录C:\Users\jros\Documents\NetBeansProjects\Petra\build
清洁:
初始化:
deps jar:
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\build
更新属性文件:C:\Users\jros\Documents\NetBeansProjects\Petra\build\build-jar.properties
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\build\empty
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\build\generated sources\ap source output
正在将19个源文件编译为C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
注意:某些输入文件使用未经检查或不安全的操作。
注意:使用-Xlint重新编译:未选中以获取详细信息。
正在将26个文件复制到C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
汇编:
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\dist
正在将3个文件复制到C:\Users\jros\Documents\NetBeansProjects\Petra\dist\lib
检测到JavaFX Ant API版本1.3
从C:\Program Files\Java\jdk1.8.0\U 60\jre\..\lib\ant-javafx.jar启动任务
从C:\Program Files\Java\jdk1.8.0\U 60\jre\..\lib\ant-javafx.jar启动任务
没有基本的JDK。包将使用系统JRE。
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist,文件:[Petra.jar,lib\RXTXcomm.jar,lib\ojdbc6.jar,lib\sqlitejdbc-0.5.4.jar]}
没有基本的JDK。包将使用系统JRE。
在以下位置使用基本JDK:C:\Program Files\Java\jdk1.8.0\U 60\jre
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist,文件:[Petra.jar]}
在以下位置使用基本JDK:C:\Program Files\Java\jdk1.8.0\U 60\jre
正在创建应用程序包:C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles中的Petra
结果应用程序捆绑包:C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
安装程序(.exe)保存到:C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist,文件:[Petra.jar]}
jfx部署脚本:
jfx部署:
罐子:
jfx重建:
生成成功(总时间:3分31秒)
但当我运行安装程序时,生成的“exe”抛出以下两个窗口:
这方面有什么线索吗?我还没有找到将JRE直接放入可执行文件的方法,但这里有一种方法,至少可以将所有库放在Jar中(使用Netbeans)以减少混乱。您以前可能在StackOverflow的其他地方见过它
<target name="package-for-store" depends="jar">
<property name="store.jar.name" value="MyJarName"/>
<!-- don't edit below this line -->
<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
</target>
您是否考虑过使用gradle作为构建工具?javafx有一个gradle插件。看一看,或者使用maven java fx plugin,它有一些bug,但对构建/导出到jar会有很大帮助谢谢你的方法,但是生成的jar甚至没有启动:可能我必须添加dll库,不是吗??我是新来的,你可以发布build.xml的截图,其中包含存储代码包吗?上面的代码只会将“lib”文件夹的内容复制到最终的jar中。如果您有任何其他依赖项,您也必须使用类似于
的东西来添加它们。这种方法似乎不适用于dll的库:(无论如何,谢谢,它可能会在下一个项目中有所帮助;)这不适用于java fx,因为java fx有自己的ant工具。