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