springboot 可执行 jar 转 exe(含有前端页面)

2022-12-02 号追加

前端是静态页面,提供一种思路

  • 可以使用 java 的 Runtime 执行 CMD 命令用来打开前端页面
  • 判断端口号是否被占用,未占用则启动,占用则不做处理
    public static void main(String[] args) throws IOException {
    
    
        JSONObject jsonObject = null;
        int port = 8080;
        String home = ".\\html\\登录.html";
        try {
    
    
            Yaml yaml = new Yaml();
            InputStream inputStream = TestApplication.class.getClassLoader().getResourceAsStream("application.yaml");
            if (inputStream != null) {
    
    
                jsonObject = JSONObject.parseObject(JSONObject.toJSONString(yaml.load(inputStream)));
                System.out.println(jsonObject);
            }
        } catch (Exception e) {
    
    
            log.error("application.yaml 转 JSON 失败");
        }
        if (null != jsonObject) {
    
    
        	// ResolveJsonUtil 是我解析 JSON 的一个方法,需要的可以看我 https://blog.csdn.net/qq_41538097/article/details/127852825 文章
            String resolvePort = ResolveJsonUtil.resolveJson("server.port", jsonObject);
            String resolveHome = ResolveJsonUtil.resolveJson("html.home", jsonObject);
            if (StringUtils.isNotEmpty(resolvePort)) {
    
    
                port = Integer.parseInt(resolvePort.trim());
            }
            if (StringUtils.isNotEmpty(resolveHome)) {
    
    
                home = resolveHome.replaceAll("\"", "").trim();
            }
        }
        try {
    
    
        	// 建立 Socket 服务端
            ServerSocket serverSocket = new ServerSocket(port);
            log.info("后台地址:127.0.0.1:" + port);
            serverSocket.close();
            SpringApplication springApplication = new SpringApplication(TestApplication.class);
            springApplication.setBannerMode(Banner.Mode.OFF); // 关闭 banner
            ConfigurableApplicationContext applicationContext = springApplication.run(args);
        } catch (IOException e) {
    
    
            log.warn("端口号 " + port + " 已使用,程序已启动," + e.getMessage());
        }
        String cmd = "cmd   /c   start   " + home;
        log.info("cmd命令为:" + cmd);
        try {
    
    
            Process process = Runtime.getRuntime().exec(cmd);
            if (process.waitFor() == 0) {
    
    
                log.info("首页打开成功");
            } else {
    
    
                log.error("首面打开失败");
            }
        } catch (IOException | InterruptedException e) {
    
    
            log.error("执行 CMD 命令错误," + e.getMessage());
        }
    }

如果有一个程序启动,再启动第二个会报如下错误,jvm 端口号已经被占用,根据如上代码可以改造 springboot 随机端口号启动和启动多个实例

在这里插入图片描述

一、简介

将 B/S 架构的前后端分离项目制作成 exe 适合 window 系统双击运行的软件,服务端使用 springboot ,前端使用静态页面,最终制作的 exe 文件不需要配置 java 环境即可运行

二、环境准备

  • 后端:一个可执行的 springboot jar 包,我的测试就返回一个字符串
    在这里插入图片描述
  • 前端:一堆静态页面,我就写了一个调用后端接口显示在前端
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>测试</title>
</head>
<body>
<p id="p1">测试文本</p>
<button onclick="load()">调用接口</button>
</body>
</html>
<script type="text/javascript">

    function load() {
      
      
            var xhr = new XMLHttpRequest();
            xhr.open("get", "http://127.0.0.1:10001/test", true);
            xhr.onload = function () {
      
      
                if (this.status == 200) {
      
      
                    var data = this.response;
					document.getElementById("p1").innerHTML = data;
                }
            }
            xhr.send();
        }
    
</script>
  • exe4j:将 jar 转换可执行 exe 文件(转换的 exe 文件本身不包含 java 环境)
  • Inno Setup 5:将依赖(即 java 环境)和 exe 一起制作成一个安装程序的工具
  • Bat To Exe Converter:将 bat 文件转换为 exe 文件 (主要用于打开前端页面)

百度网盘链接:https://pan.baidu.com/s/1FBC4YnKpWEMRBNfBUc6HGg?pwd=6666
提取码:6666

三、exe4j :jar 转 exe

当前目录文件

在这里插入图片描述
打开 exe4j
在这里插入图片描述
选择 “JAR in EXE” 模式
在这里插入图片描述
选择应用名称和保存路径
在这里插入图片描述
设置版本信息
在这里插入图片描述
在这里插入图片描述
暂不清楚作用
在这里插入图片描述
选择可执行 jar
在这里插入图片描述
选择启动类
在这里插入图片描述
指定 jre 版本
在这里插入图片描述
配置 jre 版本
在这里插入图片描述
指定 jre 路径
在这里插入图片描述

选择 Hotspot 虚拟机
在这里插入图片描述
后面可以不配置一直下一步,知道出现下图
在这里插入图片描述
点击启动,会报如下错误,因为我们上方配置 jre 时删除了让他从系统环境变量找 java 环境配置
在这里插入图片描述
如果你先想启动这个 demo.exe 文件,也简单,只需要将 jre 环境复制过来就行,复制 jre 文件夹和 demo.exe 同级目录
在这里插入图片描述
如下
在这里插入图片描述

如下启动成功,端口也改为了 10002
在这里插入图片描述
可以关闭 exe4j 软件,可以选择保存配置,文件名 exe4j-demo.exe4j

到此你就可以将 exe 文件和 jre 发给别人直接就能用了,下面介绍将 jre 环境和 exe 一块制作成安装包形式

四、Inno Setup 5:exe 添加依赖制作安装包

当前目录文件
在这里插入图片描述

打开 Inno Setup 5 (Compil32.exe 文件),点击新建
在这里插入图片描述
指定应用信息,应用名、版本、发布者、应用官网
在这里插入图片描述
指定文件夹信息
在这里插入图片描述
指定 exe 文件
在这里插入图片描述
快捷方式,就使用默认
在这里插入图片描述
安装脚本,不用管
在这里插入图片描述
选择语言
在这里插入图片描述
指定输出路径即名字
在这里插入图片描述
一直点下一步,出现下面点击完成
在这里插入图片描述
选择否,我们要改脚本将 jre 的基础包加进来
在这里插入图片描述
将你自己的 jre 路径复制进去:Source: "F:\java\jdk1.8.0_40\jre\*"; DestDir: "{app}\jre"; Flags: ignoreversion recursesubdirs createallsubdirs ==注意:DestDir: “{app}\jre” 对应 exe4j 指定的 jre 相对目录 (.\jre) ==
在这里插入图片描述

点击运行脚本
在这里插入图片描述

运行成功,会让你安装应用,可自定义目录安装
在这里插入图片描述
安装完成后目录
在这里插入图片描述

demo 目录长这样
在这里插入图片描述

可以关闭你的 jdk 环境变量,去运行,可以看到启动成功
在这里插入图片描述
到此后端发给别人就能用了,下面聊下如何添加前端一键启动

五、Bat To Exe Converter:同时启动前后端

将 test.html 页面移入 demo 目录
在这里插入图片描述

在 demo 目录新建一个 start.bat 文件,添加如下内容,下面命令就是启动 demo.exe,延时三秒打开 test.html 页面,如果你要打开非静态页面可以使用 explorer.exe https://yixiu.blog.csdn.net 替换 start ./test.html

@echo off

start demo.exe

ping -n 3 127.0.0.1

start ./test.html

如果你想设置 cmd 的窗口大小可以使用 mode con: cols=220 lines=40,如果你只想打开一个 cmd 窗口可以使用如下命令

@echo off
mode con: cols=220 lines=40
start ./test.html
demo.exe

启动 Bat To Exe Converter 软件,打开 start.bat 文件,可配置图标、exe 格式等
在这里插入图片描述
点击转换,选择保存路径
在这里插入图片描述
demo 目录如下
在这里插入图片描述
运行 start.exe ,相当 nice
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41538097/article/details/127364728