在Eclipse使用Java ant将Java项目打包为exe文件(完整流程)

一、背景说明

最近用javafx写了一个小游戏,写成之后便想实现程序的打包,使用更方便且可以跨平台使用,即使安装的电脑上没有java环境,程序也可以正常运行。
在实现这一功能的过程中也是遇到了很多问题,耽误了一个晚上的时间,所以当我成功实现打包的时候,就想把自己的一些新的认识写下来,相信也可以帮助一些人。在我学习的过程中,我在网上看到了大概三种打包的方式,分别为:

  1. 使用 InnoSetup ,好的原创文章(他人文章)有https://blog.csdn.net/rico_zhou/article/details/81301268
  2. 使用exe4j,好的原创文章(他人文章)有https://blog.csdn.net/shuizhongyueliangya/article/details/51774553
  3. 使用JavaFX Ant Tasks,也就是我用到的方法,参考的主要文献是https://code.makery.ch/library/javafx-tutorial/part7/,该文中有主要流程,且用到了InnoSetup,但只是下载安装。本文主要是以该流程为基准,详细描述一些细节坑,走一遍流程。关于JavaFX Ant Tasks的介绍性的文件还有官方文件https://docs.oracle.com/javase/10/deploy/javafx-ant-tasks.htm#JSDPG177

我之所以使用ant的方法,一方面是该方法是我学习的教程所采用的方法,另一方面是因为该方法是仅使用eclipse便可完成的。虽然使用的过程中有很多错误,困扰了很久,但实现该流程之后,仍然感觉这是非常便捷的一种方法,掌握之后,完成一次打包应该不会超过20分钟。

二、操作流程以及细节注意

该流程是教程https://code.makery.ch/library/javafx-tutorial/part7/的细化版,大家共同阅读效果更好。

1.修改build.fxbuil之前的操作

build.fxbuild是javafx project的原生文件,用户可以在这个文件中设计生成的exe(也可生成其他文件,比如msi,dmg等)的供应商名称、应用名称、版本以及主程序。
在这里插入图片描述
在修改build.fxbuild前需要统一该项目使用的jdk版本,统一需要确定两个地方,分别为preference->Java->Compiler->Compiler compliance levelpreference->Java->Installed JREs level,这两处要选择同一版本,其中后者虽然是Installed JREs level,但该项需为安装目录中的jdk文件夹而非jre文件夹,附图说明,此处应选择红框标注的文件夹。

在这里插入图片描述
以下为preference->Java->Compiler->Compiler compliance levelpreference->Java->Installed JREs level的图片说明。此处我虽然选择了JDK1.8版本,但JDK10应该也是没有问题的,不过我并没有做测试。
在这里插入图片描述
在这里插入图片描述

2.修改build.fxbuil文件

build.fxbuil文件图
该表中带星号行为必填项,填完不要忘记选择打包的格式(Packageing Format),最后选择右方的Generate ant build.xml only,项目的文件夹中会出现新的子文件夹build,build包含文件build.xml即生成成功。

3.复制resources文件夹

在生成build.xml后,运行build.xml之前,记得按照教程中的步骤,将resources文件夹移到build中。

4.修改、运行build.xml

在整个尝试打包的过程中,运行build.xml文件->报错->修改->再运行这个过程是用时最久的步骤。我在这个过程中遇到了好几种报错信息,但其实最后发现只要JDK和环境变量设置正常并不需要修改build.xml文件。下面列一下报错信息和解决方法吧(运行build.xml方法以及一些操作方法在上边发的教程里有,结合看会更好)。

  1. Could not load definitions from resource com/sun/javafx/tools/ant/antlib.xml. It could not be found.
    在我的情况中,这个报错是因为对于需要的两个jar包在指定目录找不到。附图说明。
    在这里插入图片描述
    在我最开始的项目中,我安装的jdk1.8中并没有所需的jar文件ant-javafx.jarjfxrt.jar,之后我卸载了旧版jdk1.8,安装了最新的jdk1.8,解决了这个问题,重要的一点,安装新的jdk后注意修改环境变量中的路径,附安装新版jdk说明文章(他人文章)https://blog.csdn.net/qq_39915585/article/details/82423761,文章中cmd中命令javac的结果于命令java的运行结果类似,若出现无效命令的说法,则为环境变量安装不正确,解决方法附他人一篇文章https://blog.csdn.net/love_xiaoshaung/article/details/80954492?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
    环境变量的存储是以“;”分隔的,比如要存储上述文章中的CLASSPATH 是“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”不要忘记前面的“.”和“;”,在图一中直接将引号中的内容复制在第二框里,但在图二里要一条几条写进去且不带“;”。
    在这里插入图片描述
    (图一)
    在这里插入图片描述
    (图二)

  2. javac: 无效的目标发行版: 10
    这个问题我在搜索过程中有很多回答是因为使用maven导致了这个问题,但我这里并不是这样。说来惭愧,产生这个问题是因为我在生成build.xml文件之后修改了JDK版本,修改之前,我使用的是JDK10,而build.xml中实际上有JDK版本的记录,所以产生冲突,附图说明。
    在这里插入图片描述
    另外一个很重要的地方同时也可能引起这个问题,运行build.xml文件时要设置External Tools Configurations…,修改位置右键点击build.xml->Run as->External Tools Configurations…->JRE->Seperate JRE,此处要使用Seperate JRE,注意与preference的JDK版本保持一致。

三、总结

总的来说,使用ant打包程序还是比较方便的,第二次打包只需要2分钟即可,且只要不更换JDK版本,打包新的程序也非常快,因此优势还是很明显的,缺点就是第一次会遇到很多问题。

最后希望这篇文章可以帮到大家,如有疑问欢迎继续提问,如果有帮助,可以更新在文章中,非常感谢。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值