我在NetBeans下开发了一个JavaFX应用程序,它需要运行JRE8u60和一些外部库(jar和dll)和一个“SQLite”数据库文件。我正在寻找一种方法来创建可执行文件或安装程序,其中包括(或安装)此版本的JRE和所需的库。
首先我尝试使用NetBeans本机打包器,如https://netbeans.org/kb/docs/java/native_pkg.html#fx所示,但是当我运行获取的安装程序时,可执行文件说它无法找到主类。我只是按照那个教程,所以我不知道我是否错过了适合我的特定情况所需的一些点。我的build.xml文件:
<?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>
编译时输出似乎没有错:
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)
但是当我运行安装程序时,生成的“exe”会抛出这两个窗口:
有关此问题的任何线索吗?
答案 0 :(得分:1)
我还没有找到将JRE直接放入可执行文件的方法,但是这里至少可以将所有库放在Jar中(使用Netbeans)来减少混乱。您之前可能已经在StackOverflow上的其他位置看到过它。
将此代码添加到build.xml:
<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>
只需将 MyJarName 更改为您想要调用Jar文件的任何内容(不要使用.jar扩展名)。