MySql Tomcat JDK 环境打包成exe文件,一键安装部署环境
论述
这些天因需要,故研究了一下环境exe打包的操作,本人也参考了很多篇文章,也找过文章作者,终于皇天不负有心人,个人虚拟机下配置成功,以下是具体操作步骤
前期准备
新建一个文件夹,准备好需要的环境解压包,我这边就是新建一个test文件加里面在建一个environment文件夹,将mysql,tomcat,jdk全部放置在里面
配置mysql
首先新建一个配置文件my.ini
以下是my.ini文件的内容,注意没有basedir,datadir,其他文章是有写起来的,但是本人亲测mysqld --initialize 这个命令会受反斜杠的影响而报错,即使是后面的iss文件修改的路径,{app}获取过来的路径也是反斜杠的,我也试过盘符后双反斜杠的话,mysql命令不会报错,但是我从其他文章里找到一种方法{app}{}这种能拼成盘符后的双反斜杠,但是我测试过没有实现
[client]
port=3306
[mysql]
default-character-set=utf8
[mysqld]
port=3306
character-set-server=utf8
default-storage-engine=INNODB
max_connections=100
table_open_cache=256
tmp_table_size=35M
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=69M
key_buffer_size=50M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=96M
innodb_log_file_size=20M
innodb_thread_concurrency=18
还需要新建一个myini.bat文件用来解决上述提到的问题,以下是文件内容
echo
set CURRENT_DIR=%CD%
set CURRENT_DIR=%CURRENT_DIR:\=/%
echo basedir="%CURRENT_DIR%/">>my.ini
echo datadir="%CURRENT_DIR%/data/">>my.ini
新建一个文件夹sql,用来装需要执行的sql文件,文件头记得添加新建数据库的语句
进入bin目录,新建mysql_init.bat,mysql_stop.bat两个文件
mysql_init.bat 如果想要停住可加pause;用来查看dos窗口信息,批处理的语句也可以去查看了解了解
下面的注解记得去掉,此处是为了讲解
cd /d %~dp0
//用来生成mysql的data文件夹
"%cd%\mysqld.exe" --initialize-insecure --user=mysql --console
echo -----mysql init succee-----
//安装mysql服务
mysqld install mysql
echo -----mysql service install succee-----
//设置成自启动
net start mysql
sc config mysql start=auto
net stop mysql
net start mysql
echo Installation complete
//设置用户密码
"%cd%\mysqladmin" -u root password root
echo Password change completed
cd ..
//执行之前需要的sql
"%cd%\bin\mysql.exe" -uroot -proot < "%cd%\sql\traffic_engineering_test.sql"
echo Table creation completed
echo Create new user completed
exit
mysql_stop.bat
卸载的命令,也可以到mysql的bin目录下,先net stop mysql 停止mysql服务,再mysqld remove mysql 删除服务
@echo off
cd /d %~dp0
echo ----1.[Mysql] start uninstalling Mysql ---->>../log.txt
sc stop mysql
sc delete mysql
echo ----2. [Mysql] uninstall finished---- >>../log.txt
exit
至此,mysql准备结束
JDK
JDK没什么可准备的,但我浏览过其他文章是把java放到tomcat的bin里面,然后再在jdk的bin里面写一个bat文件,本人觉得不一定这样做,而且后续需要写环境变量的时候可能会有问题,后文会提及通过一个bat文件将所有的环境变量一起写入,JDK准备好文件即可
Tomcat
tomcat也不用在里面加什么bat,其他文章也会有修改service.bat,然后在添加一个启动服务的bat文件,我觉得没必要,而且我这边测试会出现问题,所以就没有按照这一种做法,tomcat也是准备好文件即可
environment.bat
这个文件就放在environment文件夹下,用来配置所有需要添加的环境变量
这个文件也是我查询了很多文章,认为可行的方法,就是一次性配置好需要的环境变量,其他文章可能会分开写入环境变量,但我测试发现,环境变量可能会没写入成功,所以采取这种方案,注解记得删除
@echo off
echo "%~dp0"
//当前路径
echo "%cd%"
//设置各个环境变量的值
set mysqlpath=%cd%\mysql-5.7.33-winx64
set javapath=%cd%\Java\jdk1.8
set tomcatpath=%cd%\apache-tomcat-8.5.51
//写入环境变量
echo %mysqlpath%
setx MYSQL_HOME "%mysqlpath%" -m
echo %javapath%
setx JAVA_HOME "%javapath%" -m
echo %tomcatpath%
setx CATALINA_HOME "%tomcatpath%" -m
echo %Path%
查询path中是否有
echo %Path%|find /i "%MYSQL_HOME%" && set MysqlIsNull=false || set MysqlIsNull=true
echo %MysqlIsNull%
echo %Path%|find /i "%JAVA_HOME%" && set JavaIsNull=false || set JavaIsNull=true
echo %JavaIsNull%
//判断追加path
if %MysqlIsNull%==true if %JavaIsNull%==true (
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%MYSQL_HOME%%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin" /f
setx Path "%%MYSQL_HOME%%\bin;%Path%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin"
)
if %MysqlIsNull%==true if %JavaIsNull%==false (
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%MYSQL_HOME%%" /f
setx Path "%%MYSQL_HOME%%\bin;%Path%"
)
if %MysqlIsNull%==false if %JavaIsNull%==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;%%JAVA_HOME%%\jre\bin"
)
echo
//设置临时变量 此处也是测试了很多种方案,始终发现tomcat的服务写进去但是没有启动,所以打算在这里就将tomcat服务写进去
setlocal
set "CATALINA_HOME=%tomcatpath%"
set "JAVA_HOME=%javapath%"
call apache-tomcat-8.5.51\bin\service.bat install
sc config Tomcat8 start= auto
net start Tomcat8
exit
下载打包工具Inno Setup
打包exe需要用到Inno Setup这个软件链接在下
Inno Setup解压包
准备iss文件用来打包exe
和environment文件夹同个目录下
now.iss
具体的内容含义还是要去搜索下Inno Setup,以下具体说几点
[Files]
是要拷贝的文件
[INI]
里面的内容是注释了的,就是因为发现这样修改,MySQL的my.ini文件里的路径还是会让mysql命令出错,所以采取之前说的那种做法
[Run]
是要执行的bat文件
[UninstallDelete]
是要卸载删除的文件,注意卸载前需要先删掉注册了的服务,对于卸载这一块的bat还没有去看,大概猜想也是再卸载是需要执行的bat
; 脚本由 Inno Setup 脚本向导 生成!
[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。)
AppId={{9E044575-9CD9-4751-B0BE-F6758BA94548}
AppName=Test
AppVersion=V0.01
AppVerName=TestServer V0.01
AppPublisher=TestTechnology
AppPublisherURL=http://www.baidu.com/
AppSupportURL=http://www.baidu.com/
AppUpdatesURL=http://www.baidu.com/
DefaultDirName={pf}\Test
DefaultGroupName=TestSoftWare
AllowNoIcons=yes
OutputBaseFilename=Test
Compression=lzma
SolidCompression=yes
[Files]
Source:"D:\test\environment\*";DestDir:"{app}\environment";Flags:igNoreversion recursesubdirs createallsubdirs
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Icons]
Name: "{group}\{cm:UninstallProgram,交通工程监管系统}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\交通工程监管系统"; Filename: http://localhost:8304/traffic/doc.html
[INI]
;修改数据库配置文件
;Filename:"{app}\mysql-5.7.33-winx64\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}{\}mysql-5.7.33-winx64"
;Filename:"{app}\mysql-5.7.33-winx64\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}{\}mysql-5.7.33-winx64\data"
;Filename:"{app}\mysql-5.7.33-winx64\my.ini";Section:"mysqld";Key:"port"; String:"3306"
;Filename:"{app}\mysql-5.7.33-winx64\my.ini";Section:"client";Key:"port"; String:"3306"
[Run]
Filename: "{app}\environment\mysql-5.7.33-winx64\myini.bat";
Filename: "{app}\environment\environment.bat";
Filename: "{app}\environment\mysql-5.7.33-winx64\bin\mysql_init.bat";
[UninstallDelete]
Type:filesandordirs;Name:"{app}\environment"
打包
点击运行,会在同级目录下出现Output文件夹,里面的exe就是我们打出来的包
安装测试
本人实在虚拟机下测试的
安装前先安vcredist_x64.exe 避免mysql缺失dll文件导致配置不成功,后续补上链接
补上的链接
安装完后可先查看服务时候已经存在并且是自启动
用services.msc命令
查看环境变量是否写入且正确
查看是否写入path
查看java环境是否生效
查看mysql是否可连
访问localhost:8080查看tomcat是否启动正常
至此环境就部署成功了
总结
本人也是首次接触这个,通过这几天文章的研究,总算是可行了,特此记录以下,因为我发现按照现在几篇文章的流程会报错,所以现在整理一篇,也方便自己后续回顾,初次打包exe,不足之处,多多包涵