做了个Java打包工具,可以双击启动了!
日常工作主要使用Java进行开发,业余时间也热衷于技术研究,喜欢用Java的GUI库Swing开发一些实用的小工具。
但是用Swing开发软件相比C/C++的一个很大的劣势就是,Java打包出来的文件不能直接运行,需要使用JRE(Java runtime environment)才能运行,如果使用软件的人没有JRE,也不能运行软件,所以基本上没有人会考虑使用Java来开发桌面应用。
当前Java程序打包分发的几种方案:
- 使用当下最火的GraalVM,将Jar包编译成二进制可执行文件。
- 使用JLink打包,将jar包编译成二进制可执行文件。
- 使用Exe4J生成启动器,然后使用压缩软件制作自解压的压缩包。
- 编写批处理,然后再用压缩软件制作自解压的压缩包。
- 仅分发Jar包,让使用者安装JRE,然后使用命令启动Jar包。
以上方案都有不同的优缺点:
技术方案优点缺点GraalVM性能提升,减少资源损耗,安全性高构建耗时,调试困难,不好支持反射Jlink二进制文件,比携带环境更轻量级构建复杂,调试困难,体积大Exe4J降低使用门槛,有更好的体验,便于调试体积大,需要JRE运行1,不适合做小工具批处理降低使用门槛,配置灵活,易于更新,便于调试体积大,需要JRE运行,不适合做小工具仅Jar包分发文件小,容易更新没有JRE的电脑上不能运行,需要命令启动,使用门槛高,体验不好
以上方案中,二进制文件分发会调试困难,jar包形式分发会影响使用体验,现在我综合上边的几种方案,用Winform制作一个打包工具,用以将Java程序打包成二进制可执行文件,软件界面如下:
图片
软件使用如下:
现有一个Swing程序如下:
pom.xml文件
4.0.0
org.helloswing
HelloSwing
1.0-SNAPSHOT
17
17
UTF-8
com.formdev
flatlaf
3.5.1
org.apache.maven.plugins
maven-assembly-plugin
3.7.1
jar-with-dependencies
false
org.hellloswing.HelloSwing
make-assembly
package
single
HelloSwing.java文件
package org.hellloswing;
import com.formdev.flatlaf.FlatDarkLaf;
import com.formdev.flatlaf.FlatLightLaf;
import javax.swing.*;
import java.awt.*;
public class HelloSwing {
public static void main(String[] args) throws UnsupportedLookAndFeelException {
// 初始化皮肤
FlatLightLaf.install();
UIManager.setLookAndFeel( new FlatDarkLaf());
// 初始化窗口
JFrame jFrame = new JFrame("Hello Swing!");
// 设置大小
jFrame.setSize(500, 500);
// 关闭窗口后退出
jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// 设置居中
jFrame.setLocationRelativeTo(null);
// 设置元素
JPanel jPanel = new JPanel(new BorderLayout());
jPanel.add(new JLabel("Hello Swing!", JLabel.CENTER), BorderLayout.CENTER);
jFrame.getContentPane().add(jPanel);
// 显示窗口
jFrame.setVisible(true);
}
}
将其打包成胖JAR后,导出精简JRE,然后使用打包工具打包,将JAR文件于JRE打包成exe文件。之后就可以双击运行了。
图片
特此做个记录。