创建JavaFX可执行文件,包括JRE和外部库

时间:2015-06-24 07:35:33

标签: java netbeans ant jar javafx

我在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”会抛出这两个窗口:

enter image description here

enter image description here

有关此问题的任何线索吗?

1 个答案:

答案 0 :(得分:1)

我还没有找到将JRE直接放入可执行文件的方法,但是这里至少可以将所有库放在Jar中(使用Netbeans)来减少混乱。您之前可能已经在StackOverflow上的其他位置看到过它。

  1. 清理并构建您的程序。
  2. 打开文件&lt;的build.xml
  3. enter image description here

    1. 将此代码添加到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>
      
    2. 只需将 MyJarName 更改为您想要调用Jar文件的任何内容(不要使用.jar扩展名)。

      1. 右键单击build.xml,然后单击运行目标&lt;其他目标&lt;包换存储即可。
      2. enter image description here

        1. 你们都准备好了。完整的jar将位于主项目文件夹中名为 store 的文件夹中。然后,您可以在Launch4J中将其打包为.exe。