JavaFX - 部署
我想已经写到本在线教程系列的最后一部分了,应该教你如何部署(例如:打包和发布)AddressApp
第7部分的主题
- 使用e(fx)clipse本地包(Native Package)部署我们的JavaFX应用程序。
什么是部署
部署是打包和发布软件给用户的过程。这是软件开发的关键部分,因为它是第一次与使用我们软件的用户交流。
Java的广告口号是编写一次,到处运行,这说明Java语言的跨平台好处。理想情况下,这意味着我们Java应用可以运行在任何装备有JVM的设备上。 在过去,安装Java应用程序的用户经验不总是平滑的。如果用户在系统中没有要求的Java版本,它必须首先直接安装它。这导致有些困难,例如,需要管理员权限,Java版本之间的兼容问题等等。 幸运的是,JavaFX提供新的部署选项称为本地打包(也称为自包含应用程序包)。一个本地包是一个包含你的应用代码和平台指定的Java运行时的打包程序。 Oracle提供的官方JavaFx文档包含一个所有JavaFX部署选项的扩展指南。 在本章节中,我们教你如何使用Eclipse和e(fx)clipse插件创建本地包。
创建本地包
目标是在用户的计算机上单个目录中创建一个自包含的应用程序。下面是AddressApp应用看起来的样子(在Windows上):
app
目录包含我们的应用数据和runtime
目录(包含平台相关的Java运行时)。
为了让用户更加舒适,我们也提供一个安装器:
-
Windows下的
exe
文件安装器 -
MacOS下的
dmg
(拖放)安装器。
E(fx)clipse插件会帮助我们生成本地包和安装器。
第1步 编辑build.fxbuild
E(fx)clipse使用build.fxbuild
文件生成一个被Ant编译工具使用的文件。(如果你没有一个build.fxbuid
文件,在Eclipse中创建一个新的Java FX项目,并且拷贝生成的文件过来。
-
从项目的根目录下打开
build.fxbuild
。 -
填写包含一个星号的字段。对于MacOS:在应用程序标题中不能使用空格,因为好像会产生问题。
-
在Windows下Packaging Format选择
exe
,MacOS下选择dmg
,Linux下选择rpm
-
点击
Generate ant build.xml only
的连接(在右边可以找到)。 -
验证是否创建一个新的
build
目录和文件build.xml
第2步 添加安装程序的图标
我们希望安装程序有一些好看的图标:
- AddressApp.ico 安装文件图标
- AddressApp-setup-icon.bmp 安装启动画面图标
- AddressApp.icns Mac安装程序图标
-
在
build
目录下创建下面的子目录:-
build/package/windows
(只用于Windows) -
build/package/macos
(只用于macos)
-
-
拷贝上面的相关图标到这些目录中,现在它应该看起来如下所示:
-
重要:图标的名称必须精确匹配
build.fxbuild
中指定的Application的标题名:-
YourAppTitle.ico
-
YourAppTitle-setup-icon.bmp
-
YourAppTitle.icns
-
第3步 添加资源
我们的resources
目录不能自动拷贝。我们必须手动添加它到build目录下:
-
在
build
目录下创建下面的子目录:-
build/dist
-
-
拷贝
resources
目录(包含我们应用的图标)到build/dist
.
第4步 编辑build.xml包含图标
E(fx)clipse生成的build/build.xml
文件(准备使用Ant执行)。我们的安装器图标和资源图像不能正常工作。
当e(fx)clipse没有告诉它包含其它资源,例如resources
目录和上面添加的安装文件图标时,我们必须手动编辑build.xml
文件。
打开build.xml
文件,找到路径fxant
。添加一行到${basedir}
(将让我们安装器图标可用)。
build.xml - 添加"basedir"
<path id="fxant"> <filelist> <file name="${java.home}\..\lib\ant-javafx.jar"/> <file name="${java.home}\lib\jfxrt.jar"/> <file name="${basedir}"/> </filelist> </path>
找到块fx:resources id="appRes"
,文件的更下面位置。为resources
添加一行:
build.xml - 添加"resources"
<fx:resources id="appRes"> <fx:fileset dir="dist" includes="AddressApp.jar"/> <fx:fileset dir="dist" includes="libs/*"/> <fx:fileset dir="dist" includes="resources/**"/> </fx:resources>
有时候,版本数不能添加到fx:application
中,使得安装器总是缺省的版本1.0
(在注释中很多人指出这个问题)。为了修复它,手动添加版本号(感谢Marc找到解决办法)。 解决):
build.xml - 添加 "version"
<fx:application id="fxApplication" name="AddressApp" mainClass="ch.makery.address.MainApp" version="1.0" />
现在,我们已经能够使用ant编译运行build.xml
了。这将会生成一个可运行的项目jar文件。但是我们希望更进一步,创建一个很好的安装器。
第5步(Windows) - Windows exe安装器
使用Inno Setup,我们能为我们的应用程序创建一个单独.exe
文件的Windows安装器。生成的.exe
执行用户级别的安装(无需管理员权限)。也创建一个快捷方式(菜单和桌面)。
-
下载Inno Setup 5以后版本,安装Inno程序到你的计算机上。我们的Ant脚本将使用它自动生成安装器。
-
告诉Windows Inno程序的安装路径(例如:
C:\Program Files (x86)\Inno Setup 5)
。添加Inno安装路径到Path环境变量中。如果你不知道哪里可以找到它,阅读Windows中如何设置路径和环境变量. -
重启Eclipse,并且继续第6步。
第5步(MAC) - MacOS dmg安装器
为了创建Mac OS dmg
拖放安装器,不需要任何的要求。
注意:为了让安装器映像能工作,它的名称必须与应用名称相同。
第5步(Linux等) Linux rpm安装器
其它打包选项(Windows的msi
,Linux的rpm
)参考本地打包博客 或者本oracle 文档.
第6步 运行build.xml
最后一步,我们使用ant运行build.xml
,右击 build.xml
文件| Run As | Ant Build。
编译将运行一会(在我的计算机上大概1分钟)。
如果一切都成功,你应该在build/deploy/bundles
目录下找到本地打包。Windows版本看起来如下所示:
文件AddressApp-1.0.exe
可以用作为单个文件安装应用。该安装程序将拷贝打包到C:/Users/[yourname]/AppData/Local/AddressApp
目录下。