windows一键部署java项目

news2025/2/24 7:13:44

前言

  前段时间老大看我很闲...然后给我下达了一项很重要的任务:windows一键部署,需要把服务(jdk、tomcat、mysql、jar包、前端压缩包)打成一个exe应用程序,点击安装会启动所有服务,打开浏览器http://localhost:8080/xxx就可以访问系统了,运维人员一键安装即可省去了环境搭建和部署的时间。听后感觉很神奇,网上找了找确实有这种案例,于是我就开始了学习和实践,一周之后不辱使命,完美地完成任务可以去交差了

准备工作

  jdk用的1.8免安装版,只需要将安装好的jdk拷贝一份即可。下载地址

  tomcat用的8版本,下载后缀windows-x64.zip的免安装版。下载地址

  mysql用的5.7.24免安装版,高版本有很多问题(如不需要mysql,删除其相关代码即可)。下载地址

  Inno Setup6,一款为Windows程序提供的免费安装程序,通过它可以将需要的文件压缩打包成exe安装程序,然后像安装程序一样解压到另外一个环境中。下载地址

  

编辑脚本

  编辑脚本前先来简单学习一些cmd命令

  cd:进入  "%cd%":当前目录  echo:打印输出  exit:退出  pause:按下任意键继续。。。

init-path.bat

echo 配置jdk环境变量开始
cd ..\jdk
echo "%cd%"
set jdkpath=%cd%
echo %jdkpath%
setx JAVA_HOME  "%jdkpath%"  -m
setx CLASSPATH  ".;%%JAVA_HOME%%\lib\tools.jar;%%JAVA_HOME%%\lib\dt.jar" -m
echo %Path%
echo %Path%|find /i "%JAVA_HOME%" && set IsNull=true || set IsNull=false
echo %IsNull%
if not %IsNull%==true (
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin" /f
setx Path "%Path%;%%JAVA_HOME%%\bin"
)
echo 配置jdk环境变量完毕

echo 配置mysql环境变量开始
cd ..\mysql
echo "%cd%"
set mysqlpath=%cd%
echo %mysqlpath%
setx MYSQL_HOME  "%mysqlpath%"  -m
echo %Path%
echo %Path%|find /i "%MYSQL_HOME%" && set IsNull=true || set IsNull=false
echo %IsNull%
if not %IsNull%==true (
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%MYSQL_HOME%%\bin" /f
)
echo 配置mysql环境变量完毕
exit

  设置mysql的环境变量是因为可以使用mysql命令,以防sql脚本没初始化成功方便查找原因。例如:在mysql安装路径的bin目录下使用管理员打开cmd窗口

运行mysql -uroot -proot即可进入数据库  show databases; 查看所有数据库  use 数据库名称; 使用数据库  show tables; 查看所有表

init-mysql.bat

echo 安装mysql开始
cd ..\mysql
set inipath=%cd%\my.ini
cd bin
"%cd%\mysqld.exe" -install mysql --defaults-file="%inipath%"
"%cd%\mysqld.exe" --initialize-insecure --user=mysql --console
echo 启动mysql并设置为自启动
net start mysql
sc config mysql start=auto
"%cd%\mysqladmin.exe" -u root password root
echo 修改密码完毕
cd ..
"%cd%\bin\mysql.exe" -uroot -proot < "%cd%\SqlFile\test.sql" 
echo 数据库初始化完成
exit

my.ini

[client]

port=3306

default-character-set=utf8

[mysqld]

wait_timeout=2880000

interactive_timeout = 2880000

max_allowed_packet = 100M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

start.bat

echo 安装tomcat执行service.bat脚本
cd ..\tomcat\bin
echo "%cd%"
call "%cd%\"%service.bat install tomcat8
echo  -------tomcat install end------------------
echo 启动tomcat服务
sc start tomcat8
wmic service where name="tomcat8" startservice

pause;

echo 启动java服务
cd ..\..\tool
echo "%cd%"
set APP_NAME=java.jar
setlocal enabledelayedexpansion
set port=9091
echo find run port:  %port% process
for /f "tokens=1-5" %%a in ('netstat -ano ^| find ":%port%"') do (
    if "%%e%" == "" (
        set pid=%%d
        echo The process pid '!pid!' has been released
    ) else (
        set pid=%%e
        echo the process pid for the current port is '!pid!'
    )
    echo !pid!
    taskkill /f /pid !pid!
)
echo 5 seconds close this bat
echo Starting program %APP_NAME%
java -Xms2048m -Xmx5120m -server -jar %APP_NAME%
echo run %APP_NAME% Success
pause

  没有将tomcat放在install文件安装时启动服务是因为第一次安装后tomcat服务总是起不来(打开任务管理器点击服务搜索tomcat8,卸载程序——>服务器重启再次安装就会出现这个问题),黑窗口也没看到错误信息,为了完美安装,无奈只好放在和jar包启动脚本一起了。

Inno Setup使用

Inno Setup在安装后的根目录下创建一个后缀.iss的文件,代码如下。

编辑完成后,点击上方Build——>Compile,等待完成打包,输出在同级目录下的Output文件

#define MyAppName "XXX管理系统"        
#define MyAppVersion "V1.0"           
#define MyAppPublisher "XXX科技有限公司"
#define MyAppURL "http://www.baidu.com/"

; 基本配置
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
; 单独标识,可以通过innosetup-QSP-6.0.5.exe 工具自动生成
AppId={{0167D65D-549A-4BA3-B88A-4814EC5A1D35}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; 默认安装路径
DefaultDirName=C:\Program Files (x86)\program\
DefaultGroupName={#MyAppName}
; 软件名称
OutputBaseFilename=deployment
; 软件图标
SetupIconFile=C:\Users\Administrator\Desktop\program\tool\download.ico 
; 压缩方式  
Compression=lzma
; yes 可以使文件更小
SolidCompression=yes
; 必需有管理员权限才能安装
PrivilegesRequired=admin
; 安装密码
;Password=password
; 开启加密,需要一个iscrypt.dll文件,网上有下载的
;Encryption=yes

; 语言配置 
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"

; 安装文件
[Files]
; 安装部署的源文件路径
Source: "C:\Users\Administrator\Desktop\program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

; 快捷键
[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\快捷HTTP地址"; Filename: http://localhost:8080/dist
Name: "{commondesktop}\运行XXX管理系统应用程序"; Filename: "{app}\tool\start.bat" 
Name: "{commondesktop}\安装须知"; Filename: "{app}\tool\安装须知.txt" 

; 程序安装成功后执行脚本
[Run]     
Filename: "{app}\install\init-path.bat";
Filename: "{app}\install\init-mysql.bat";

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone

; 程序卸载成功后执行脚本
[UninstallRun]
Filename:"{app}\uninstall\uninstall.bat";

; 程序卸载成功后删除文件
[UninstallDelete]
Type:filesandordirs;Name:"{app}\mysql"
Type:filesandordirs;Name:"{app}\tomcat"
Type:filesandordirs;Name:"{app}\install"
Type:filesandordirs;Name:"{app}\uninstall"

FAQ:

如出现此错误,是因为安装mysql缺少文件,低版本 点击下载 Visual Studio 2013,高版本 点击下载 Visual Studio 2015

 如出现此错误,是因为安装mysql缺少文件,点击下载 解压安装后将vcruntime140_1.dll复制到C:\Windows\System32,卸载mysql服务重新安装即可

 运行jar包如出现此错误,是因为高版本的mysql需要SSL身份验证(低版本不需要),当然也可以不需要验证

 解决方法:连接数据库的url后面加上参数即可,例如:jdbk:mysql://localhost:3306/testdb?characterEncoding=UTF-8&useSSL=false

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 程序设计报告[对接java的迭代器接口]

1&#xff1a;程序的功能设计与分析 -&#xff1a;将实现deque与stack -&#xff1a;采用继承与内部类来提高程序的拓展性、安全性、简洁性 -&#xff1a;对接到java.util.iterator中的iterator接口与iterable接口 2&#xff1a;程序的特点分析 -&#xff1a;观察到队列、栈都…

二战华为成功上岸,准备了小半年,要个27k应该也算不上很高吧~

先说下我基本情况&#xff0c;本科不是计算机专业&#xff0c;现在是学通信&#xff0c;然后做图像处理&#xff0c;可能面试官看我不是科班出身没有问太多计算机相关的问题&#xff0c;因为第一次找工作&#xff0c;华为的游戏专场又是最早开始的&#xff0c;就投递了&#xf…

二、肺癌检测-LUNA数据集下载和介绍

LUNA数据集是一个肺部肿瘤CT扫描结果的数据集&#xff0c;可用于作为肺癌检测的模型训练。 一、数据集下载 step1&#xff1a;登陆LUNA16官网&#xff0c;链接为&#xff1a;Home - Grand Challenge step2&#xff1a;点击网站左侧【download】&#xff0c;进入下载页面。 s…

图形学-着色频率与渲染管线

1.着色频率 根据不同的着色方式&#xff0c;有不同的着色频率&#xff0c;主要的着色频率分为三种——面着色&#xff0c;顶点着色和像素着色。主要的不同之处在于法线的选择方式不同。 面着色 Flat Shading指的是计算每一个三角形平面的法线后对一个平面整体进行着色&#x…

Redo日志和Undo日志

Redo日志和Undo日志Redo日志和Undo日志1 Redo日志和Undo日志概述2 Redo日志2.1 为什么需要Redo日志2.2 Redo日志的好处、特点3 Undo日志3.1 如何理解Undo日志3.2 Undo日志的作用Redo日志和Undo日志 1 Redo日志和Undo日志概述 事务有4种特性&#xff1a;原子性、一致性、隔离性…

C++类和对象(中)【万字详解】

这一篇就是C中的类和对象的核心内容了. 目录 类的6个默认成员函数 构造函数 概念 特性 析构函数 概念 特性 拷贝构造函数 概念 特性 赋值运算符重载 运算符重载 赋值运算符重载 const成员 const修饰的类成员函数 8.取地址及const取地址操作符重载 类的6个默认成员函数 如果一个…

洛谷千题详解 | P1004 [NOIP2000 提高组] 方格取数【C++、Java、Pascal语言】

博主主页&#xff1a;Yu仙笙 专栏地址&#xff1a;洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析&#xff1a; C源码&#xff1a; Java源码&#xff1a; Pascal源码&#xff1a; ---------------------------------------------------------------------…

KMP算法模式匹配——手工求解next和nextval数组值

本文需要了解KMP算法基本流程和相关概念&#xff0c;如有问题&#xff0c;请先进行基础学习&#xff1a;链接: 天勤-KMP算法易懂版 求解next数组值 给定模式串&#xff1a;“ababaaab”&#xff0c;求解其next数组值。 例子里面的ababaaab&#xff0c;我们定义一个 i 为模式串的…

【微服务】Nacos Discovery--服务治理

Nacos Discovery--服务治理前言服务治理常见的注册中心ZookeeperEurekaConsulNacosNacos 入门搭建nacos环境将商品微服务注册到nacos将订单微服务注册到nacos总结前言 上一章中&#xff0c;我们利用用户–订单–商品&#xff0c;实现了三个简单的微服务&#xff0c;实现了微服…

如何寻找计算机领域的英文文献?

大家一定或多或少都有文献检索的经验吧&#xff0c;中文文献还好&#xff0c;我们总归是对自己的的母语比较熟悉&#xff0c;通过关键词或其他检索条件&#xff0c;总能得心应手地找到自己需要的文献。相较于中文文献&#xff0c;对外文文献的检索就显得难度增加了不少&#xf…

pthread_create创建线程失败问题排查

一些基础概念的了解 Android中线程&#xff08;Thread&#xff09;的创建及内存分配过程分析 pthread_create创建线程失败的OOM详解 不可思议的OOM 通过上面的文章&#xff0c;我们知道为什么会报pthread_create错误 在创建线程的时候&#xff0c;报的下面这些错误&#xff0…

SAP采购订单中的净价是单价还是总价?

在采购订单中习惯上我们把订单项目的的净价理解为什么&#xff1f;单价还是总价&#xff1f; 先不着急回答。看看以下两个采购订单的对比截图就能了解&#xff0c; 在4050004000这笔采购订单中&#xff0c;采购10件黄色箱子&#xff0c;每10件500元。所以&#xff0c;净价500…

《JavaSE-第十七章》之LinkedList

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 刷题求职神器 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水…

Python Excel导入Mysql的通用方法

文章目录一、前言二、实现一、前言 此代码将导入部分尽量通用&#xff0c;仅配置下面两项就可以进行导入了&#xff1a; 从哪个excel导入到哪个mysql表 在程序中配置 他们之间的字段如何对应 写在mysql表中 ps&#xff1a;id&#xff0c;create_time&#xff0c;update_tim…

基于IDEA创建SpringBoot项目并进行入门分析

基于IDEA创建SpringBoot项目并进行入门分析 文章目录基于IDEA创建SpringBoot项目并进行入门分析SpringBoot 项目创建创建Module项目结构分析SpringBoot 项目启动分析启动入口启动过程概要分析SpringBoot 快速入门分析业务描述API设计分析代码编写及运行运行过程中的BUG分析Spri…

单商户商城系统功能拆解26—营销中心—限时秒杀

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

数电学习(六、时序逻辑电路)(三)

文章目录时序逻辑电路的设计方法同步时序逻辑电路的设计方法一般步骤改进步骤例&#xff1a;蚂蚁走迷宫背景分析继续编码状态&#xff0c;然后写出状态图&#xff0c;然后卡诺图化简&#xff0c;得到方程设计总结时序逻辑电路的设计方法 同步时序逻辑电路的设计方法 一般步骤…

2022最新SpringCloud面试题附完整答案

一、选择题 1.启动Ribbon的类注解是: ( ) A RibbonClient B EnableClient C EnableDisscoveryClient D Ribbon 2.下面哪个注解不是SpringbootApplication包含的默认属性值&#xff1a;&#xff08; &#xff09; A: Configuration B: EnableAutoConfiguration C: ComponentSc…

【LINUX】Linux最常用的20个基本指令 介绍~分析

什么是 Linux ​ Linux 是一款基于 GNU 通用公共许可协议 的 自由和开放源代码 的类UNIX操作系统&#xff0c;该操作系统的内核由 Linus Torvalds 在1991年首次发布。之后&#xff0c;在加上用户空间的应用程序之后&#xff0c;就成为了Linux操作系统。 但是&#xff0c;严格来…

springboot充电桩综合管理系统

目录 1 绪论 1 1.1 课题背景 1 1.2 课题研究现状 1 1.3 初步设计方法与实施方案 2 1.4 本文研究内容 2 2 系统开发环境 4 2.1 Java技术 4 2.2 JSP技术 4 2.3 B/S模式 4 2.4 MyEclipse环境配置 5 2.5 MySQL环境配置 5 2.6 SSM框架 6 3 系统分析 7 3.1 系统可行性分析 7 3.1.1 经…