Java具有一次编写导出运行的特点,而新一代的Java桌面支持程序JavaFx,更是将这种支持方式表现到了极致。我们可以将我们编写的JavaFx程序打包成直接可运行的程序。这种打包方式,会将本平台的JDK也一同打包入可执行的程序。也就是说这种打包的程序在没有JDK的环境也照样运行。

打包方法

网上了使用Ant打包的方法,这种方式古老又不方便。下面提供一种简单的方式。

  1. 添加打包依赖的maven项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<!-- 这个plugin得作用是将依赖的jar包都打入可执行的程序 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<configuration>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.8.3</version>
<configuration>
<!-- 指明javafx的入口类 -->
<mainClass>net.gcl.ticket.ui.Main</mainClass>
<!-- 我是在MAC系统进行打包所以这里是dmg文件 -->
<bundler>dmg</bundler>
<!-- 指明打包后文件的存储位置 -->
<jfxAppOutputDir>${project.build.directory}/app</jfxAppOutputDir>
<nativeOutputDir>${project.build.directory}/native</nativeOutputDir>
<appName>Ticket</appName>
<vendor>net.gcl.ticket</vendor>
</configuration>
</plugin>
  1. 执行打包命令:
mvn jfx:native

dmg文件就会打包到指定的文件目录,不过我试了几次有时候在桌面,可能是intellij的bug吧。但是打包肯定成功,程序可以直接运行