做了个java打包工具,可以双击启动了!

java 实现双击 .bat 文件启动程序 最近在研究James邮件服务器,现在单独的启动服务写客户端没有太大问题,但是项目经理要求把James整合到项目当中去(项目启动James也就启动了,项目关闭,James也就随着关闭了,不需要在另外的启动服务),我打算在项目里面写个监听器,当项目启动的时候,触发某个方法然后启动James,所以我先用java实现了启动James的方法(和双击一样的效果,都可以启动James服务器),现在记录下来,以免 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

6bed4150573457eae46702d19d41624c.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:juejin.cn/post/
7411745719226482738


我日常工作主要使用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程序打包成二进制可执行文件,软件界面如下:

b8fdc55d852d2a3c7c1ac6b4690759f0.jpeg

软件使用如下:

现有一个Swing程序如下:

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.helloswing</groupId>
    <artifactId>HelloSwing</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.formdev/flatlaf -->
        <dependency>
            <groupId>com.formdev</groupId>
            <artifactId>flatlaf</artifactId>
            <version>3.5.1</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.7.1</version>
                <configuration>
                    <!-- 获取所有项目依赖项 -->
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <!--  去除jar-with-dependencies后缀  -->
                    <appendAssemblyId>false</appendAssemblyId>
                    <!--   指定启动类    -->
                    <archive>
                        <manifest>
                            <mainClass>org.hellloswing.HelloSwing</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <!-- 绑定到包装阶段 -->
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

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文件。之后就可以双击运行了。

4e411b1904b4e3dca1f8c3562fdfed62.jpeg

特此做个记录。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

8b4da280df3d72a3a1db715a6abada24.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

ba1e44044c1ebcefd10bd6183ec308cc.png

61c93b9de5f07b434e82dc30c10bb482.png6d2d4c63d57b0dfc5106a54e5ca1c282.png0849fa2e01edefee44f609df16122f33.png680dd796819ec05a54561fffc6896241.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
j2e_free打包工具 解压安装后,按照操作提示可将已经打包好的jar文件转换成exe的执行程序 立即下载

相关推荐

【完美解决】Anaconda3安装后缺失大量文件,没有scripts、Library等目录

Anaconda3是官网下载的:https://www.anaconda.com/distribution/#download-section 我选择的是64位python 3.7的版本。 问题出现及现象: 我自己选择了一个D盘的目录D:\Tools\Anaconda3进行安装,装完后发现conda list命令无法执行,首先都到的是配置环境变量,然后发现安装目录下缺失大量文件(如下图)...

android之行 3万+

芋道 yudao-cloud 项目监控

芋道 yudao-cloud 项目通过集成多种开源组件构建完整的监控体系,覆盖应用性能、数据库、日志和链路追踪等维度。主要采用 Spring Boot Admin 实现 JVM 进程监控,SkyWalking 负责链路追踪和日志收集,Druid 监控 MySQL 连接池和 SQL 性能,同时支持 Redis 监控和 Sentinel 服务保障。所有监控系统通过前端菜单统一管理,支持动态配置和灵活扩展。该设计实现了多层次监控能力,用户可根据需求选择组件或替换为 Prometheus 等替代方案。

夏寻的博客 962

【驭风计划 机器学习】实验6 基于集成学习的 Amazon 用户评论质量预测

¶随着电商平台的兴起,以及疫情的持续影响,线上购物在我们的日常生活中扮演着越来越重要的角色。在进行线上商品挑选时,评论往往是我们十分关注的一个方面。然而目前电商网站的评论质量参差不齐,甚至有水军刷好评或者恶意差评的情况出现,严重影响了顾客的购物体验。因此,对于评论质量的预测成为电商平台越来越关注的话题,如果能自动对评论质量进行评估,就能根据预测结果避免展现低质量的评论。本案例中我们将基于集成学习的方法对 Amazon 现实场景中的评论质量进行预测。

Mege1的博客 473

国内开源框架(快速开发,避免重复造轮子)

多一点快乐!!!

IT小辉同学 6201

无需Root!安卓模拟器+BurpSuite轻松搞定微信小程序抓包

本文详细介绍了如何在不root安卓设备的情况下,使用安卓模拟器和BurpSuite实现微信小程序抓包。通过夜神模拟器降级安卓版本、配置BurpSuite代理及安装证书等步骤,开发者可以轻松绕过微信的证书绑定,高效抓取小程序数据包。文章还提供了常见问题排查和高阶技巧,帮助开发者提升抓包效率。

weixin_29213655的博客 365

XGBoost与Embedding混合建模实战解析

在机器学习领域,特征工程与模型融合是提升预测性能的关键技术。Embedding技术通过将高维稀疏特征(如文本、ID类数据)转化为低维稠密向量,有效捕获语义关联;而XGBoost作为强大的集成学习算法,擅长处理结构化特征并进行自动特征组合。两者结合的混合架构(如Semantic Boosted Trees)在金融风控和推荐系统等场景中展现出显著优势,尤其在处理用户行为序列、商品ID等复杂特征时,相比传统方法能获得更好的模型效果。本文通过电商推荐和金融反欺诈等案例,详解如何实现Embedding+XGBoost

weixin_28718641的博客 327

芋道微服务功能介绍(限免)

芋道 Spring Cloud是一款国产的SpringCloud微服务框架,包括Outh2.0、微服务网关、微服务注册中心、配置中心、消息队列、任务调度、链路追踪、服务保障等。上一章节我们进度,我们已经把后端系统API、后台管理系统(Vue3版本)运行起来了,今天我们介绍下这些大致的功能。这一章节就讲解到这里,我们做了后台管理系统登录流程拆解,看到了页面跳转、后端API调用、接口Debug、页面数据交互等。下一章节, 我们继续介绍其他功能。

Java 技术专栏,从入门到精通,熟悉企业级开发 1万+

[TC3XX]AURIX TC3XX系列之启动流程

本文介绍了微控制器(MCU)启动过程中固件(Firmware)和启动软件(SSW)的工作原理。MCU上电复位后,硬件完成初始化,BootROM中的固件开始执行,进行参数加载、模式选择等操作。SSW作为第一个执行的软件,负责时钟配置、安全检查、多核管理及启动模式选择,最终跳转至用户代码。启动模式包括内部Flash启动、Bootloader模式(通过ASC或CAN接口)和备用启动模式(ABM),具体由复位类型、引脚配置和UCB设置决定。文章特别指出英飞凌TC3xx系列芯片中固件不可修改,只能通过配置参数定制启动

redparrot2008的博客 1423

芋道Docker部署

docker部署芋道

m0_54013833的博客 8252

Linux下搭建简易的HTTP服务器完成图片显示

篇文章作为Linux下socket(TCP)网络编程的练习,使用C语言代码搭建一个简单的HTTP服务器,完成与浏览器之间的交互,最终在浏览器上显示一张图片;通过这个例子可以巩固socket里多线程使用,也可以方便学习了解HTTP协议。

2589

BPC坏点矫正

whatis the Bad Pixel? 坏点为死点,也就是基本不随照度变化呈现光电线性转换的关系。表现为暗态常亮,亮态常暗。 坏点分类:静态坏点:亮坏点,暗坏点。 动态坏点:在一定像素范围内,该点表现正常,而超过这一范围,该点表现的比周围像素要亮。与sensor ...

camerall 1万+

看看人家的快速开发平台,确实清新优雅!

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 10:33更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2021超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析作业调度中间件 E...

芋艿V 2917

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

做了个Java打包工具,可以双击启动了!

来源:juejin.cn/post/7411745719226482738???? 欢迎加入小哈的星球,你将获得:专属的项目实战 /1v1 提问/Java 学习路线 /学习打卡/每月赠书/社群讨论新项目:《从零手撸:仿小红书(微服务架构)》正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍;《...

犬小哈 84

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

做了个 Java 打包工具,可以双击启动了!

来源:juejin.cn/post/7411745719226482738???? 欢迎加入小哈的星球,你将获得:专属的项目实战 /1v1 提问/Java 学习路线 /学习打卡/每月赠书/社群讨论新项目:《从零手撸:仿小红书(微服务架构)》正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍;《...

犬小哈 124

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

详解jar命令打包生成双击即可运行的Java程序

建立一个新文件夹,写一个java文件,用javac编译后生成.class文件,新建一个名为“manifest”的文件(可以不用后缀名),内容为:Main-Class:  类名,其中冒号与类名之间一定要有一个空格,这是java规范,若该类属于某一个包,则戏称Main-Class:  包名.类名。特别要注意一点的是在类名后一定要按回车键,使光标移动到下一行,不然在运行jar包时会提示缺少主清单属性

Pure_Eyes的博客 1703

做了个Java打包工具,可以双击启动了

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享点击关注#互联网架构师公众号,领取架构师全套资料 都在这里0、2T架构师学习资料干货分上一篇:2T架构师学习资料干货分享大家好,我是互联网架构师!作者:广州牛马链接:juejin.cn/post/7411745719226482738我日常工作主要使用Java进行开发,业余时间也热衷于技术研究,喜欢用Java的GUI库Swing...

emprere的博客 125

公司的这种打包双击启动方式,太方便了!

将其打包成胖JAR后,导出精简JRE,然后使用打包工具打包,将JAR文件于JRE打包成exe文件。我日常工作主要使用Java进行开发,业余时间也热衷于技术研究,喜欢用Java的GUI库Swing开发一些实用的小工具。但是用Swing开发软件相比C/C++的一个很大的劣势就是,Java打包出来的文件不能直接运行,需要使用JRE()才能运行,如果使用软件的人没有JRE,也不能运行软件,所以基本上没有人会考虑使用Java来开发桌面应用。没有JRE的电脑上不能运行,需要命令启动,使用门槛高,体验不好。

weixin_44421461的博客 39

Linux系统部署jar包并设置桌面图标双击启动

服务器安装的是Ubuntu系统(Ubuntu是linux的一个发行版本),然后将一个java程序部署在服务器中。因为现场使用人员不熟悉linux系统,不会使用命令行启动程序,故需要制作一个类似windows中bat文件,让用户直接双击就能打开程序。

普通还不自信的程序员 1840

Java 文件打包,双击运行

package win; import java.awt.*; import java.awt.event.*; public class windows { public static void main(String args[]) { Frame f = new Frame("Google"); f.setBounds(500,

天上满是飞机 492
上一篇: Guava中这些好用的工具类,能让你写出优雅的代码!
下一篇: 技术总监:公司不在乎你干了多少活!
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值