windows一键部署java项目

前言

  前段时间老大看我很闲...然后给我下达了一项很重要的任务: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

本人原创,仅供参考。未经允许,禁止转载!!!

posted on 2020-05-24 19:42  尹镇镇  阅读(4196)  评论(3编辑  收藏  举报