平台打包整合成exe安装部署(java+mysql+jar+redis+activemq+WinSW)

上篇文章 : https://blog.csdn.net/yueyekkx/article/details/123934814
写了war包的方式,这篇写jar包.

准备工作:
1、下载免安装的Mysql5.7、JDK1.8、redis、mq
(根据电脑系统类型选择对应的位数,根据项目选择版本!大同小异)
2、下载Inno Setup打包工具(http://www.jrsoftware.org/isdl.php)
3、测试用的虚拟机,Windows Server 2012 R2系统
4、WinSW下载地址:https://github.com/kohsuke/winsw/releases,具体原理使用自行百度。
开始:
1、文件放置
建立一个文件夹,把解压文件全部放到该目录下:
平台打包整合成exe安装部署(java+mysql+jar+redis+activemq+WinSW)_第1张图片
其中guncab_server文件夹下有改好名称的WinSW和jar包
平台打包整合成exe安装部署(java+mysql+jar+redis+activemq+WinSW)_第2张图片
2、配置mysql
参考上篇文章,此处不过多解释,
区别是卸载时因为没有tomcat用的是unistall_mysql.bat,位置在mysql\bin目录下,内容如下:

@echo off
echo 停止并删除数据库
net stop MySQL
sc delete MySQL
echo 删除环境变量
wmic ENVIRONMENT where "name='CLASSPATH'" delete
wmic ENVIRONMENT where "name='JAVA_HOME'" delete
echo 删除完成

3、配置JDK环境变量
此处把JDK单独拿出来了,参见上图。直接在文件夹下,设置配置环境install_evn.bat文件,内容如下:

@echo off 
echo
echo  "%~dp0"
echo "%cd%"
set jdkpath=%cd%\jdk1.8.0_171
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 "%%JAVA_HOME%%\bin;%Path%"
)
exit

4、配置Redis

位置参见上图,建立install_redis.bat文件作为启动服务,内容如下:

@echo off 
echo 开始安装redis缓存服务
cd Redis-x64-3.2.100
redis-server.exe --service-install
echo 缓存服务启动中
redis-server.exe --service-start
ping -n 3 127.1>nul
echo redis缓存服务安装完成

建立uninstall_redis.bat文件作为卸载服务,内容如下:

@echo off 
echo 开始卸载redis缓存服务
cd Redis-x64-3.2.100
echo 缓存服务停止中
redis-server --service-stop
redis-server --service-uninstall
ping -n 3 127.1>nul
echo redis缓存服务卸载完成

4、配置ActiveMQ
mq有32位和64位版本,本次使用64位,其本身有InstallService.bat可以添加到服务,我们调用bat文件,并启用服务,设置开机自启动。
平台打包整合成exe安装部署(java+mysql+jar+redis+activemq+WinSW)_第3张图片

位置参见上图,建立install_mq.bat文件作为启动服务,内容如下:

@echo off 
echo 开始安装activemq服务
cd apache-activemq-5.15.10\bin\win64
call InstallService.bat
net start ActiveMQ
rem 下面两句是设置到服务里自动启动的
wmic service where name="ActiveMQ" changestartmode "automatic"
wmic service where name="ActiveMQ" startservice
echo activemq服务安装并启动完成
exit

其本身有UninstallService.bat可以卸载服务,建立uninstall_mq.bat文件作为卸载服务,内容如下:

@echo off 
echo 开始卸载activemq服务
net stop ActiveMQ
cd apache-activemq-5.15.10\bin\win64
call UninstallService.bat
exit

5、配置WinSW和jar
本次使用WinSW v2.11.0,内有WinSW-x64.exe和xml文件,一般使用方式,修改exe和xml文件名称,使其一致,执行文件放到一起。
本次文件guncab_1.xml文件如下:

<service>
  <id>guncab</id>
  <name>guncab</name>
  <description>This service is a service guncab</description>
  <executable>java</executable>
  <arguments>-jar guncab1V2.09.jar</arguments>
  <log mode="reset"/>
</service>

看到不一致是因为我打包运行后,不能启动服务(Windows Server 2012 R2是这样,不知道其他系统是否这样),报错:
System.ComponentModel.Win32Exception: The system cannot find the file specified 即系统没有找到指定文件。于是就想用java全路径,但是安装可能是随机的,又不能写死,所以,建立一个install_guncabxml.bat文件,生成java全路径并复制到guncab.xml,删除guncab_1.xml,此时exe和xml就一致了。
install_guncabxml.bat文件内容如下:

@echo off
setlocal EnableDelayedExpansion
set jdkpath=%cd%\jdk1.8.0_171
set executable=%jdkpath%\bin\java
cd guncab_server

(for /F "delims=" %%a in (guncab_1.xml) do (
   set "line=%%a"
   set "newLine=!line:executable>=!"
   if "!newLine!" neq "!line!" (
      set "newLine=%executable%"
   )
   echo !newLine!
)) > guncab.xml
del guncab_1.xml

完成这步后,就可以使用WinSW注册服务了,建立一个install_guncab.bat文件。

@echo off 
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
echo 开始安装guncab服务
cd guncab_server
guncab install
echo 启动guncab服务
guncab start
rem 下面两句是设置到服务里自动启动的
wmic service where name="guncab" changestartmode "automatic"
wmic service where name="guncab" startservice
echo guncab服务安装并启动完成
exit

建立一个uninstall_guncab.bat文件,用来卸载服务。

@echo off 
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
echo 开始卸载guncab服务
cd guncab_server
echo 停止guncab服务
guncab stop
guncab uninstall
echo guncab服务卸载完成
exit

6.配置Inno setup

准备一个guncab.ico文件,作为生成exe的图标。[Run]下边的按顺序执行,我的配置:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "项目名称"        
#define MyAppVersion "版本号"           
#define MyAppPublisher "公司名"
#define MyAppURL "公司网址"
 
; 基本配置
[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.)
; 单独标识,可以通过 工具自动生成    点击工具--- 生成GUID
AppId={{F2A71193-9C4D-44E8-8A74-0079CFD11719}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; 默认安装路径
DefaultDirName=C:\gongkongji
DefaultGroupName={#MyAppName}
; 软件名称
OutputBaseFilename=guncab
; 软件图标
SetupIconFile=C:\gongkongji\guncab.ico 
; 压缩方式  
Compression=lzma
; yes 可以使文件更小
SolidCompression=yes
; 必需有管理员权限才能安装
PrivilegesRequired=admin
; 安装密码
;Password=itdragon
; 开启加密,可能还需要一个dll文件
;Encryption=yes
 
; 语言配置 
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
 
; 安装文件
[Files]
; 安装部署的源文件路径
 Source: "C:\gongkongji\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

 
; 快捷键
[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" 
Name: "{commondesktop}\项目网址"; Filename: http://localhost:1234

[INI]
;修改数据库配置文件
Filename:"{app}\mysql-5.7.28-winx64\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}\mysql-5.7.28-winx64"
Filename:"{app}\mysql-5.7.28-winx64\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}\mysql-5.7.28-winx64\data"
Filename:"{app}\mysql-5.7.28-winx64\my.ini";Section:"mysqld";Key:"port"; String:"3306"
Filename:"{app}\mysql-5.7.28-winx64\my.ini";Section:"client";Key:"port"; String:"3306"


 
; 程序安装成功后执行以下服务脚本
[Run]     
Filename: "{app}\mysql-5.7.28-winx64\bin\mysql_init.bat";
Filename: "{app}\install_evn.bat"; 
Filename: "{app}\install_redis.bat"; 
Filename: "{app}\install_mq.bat"; 
Filename: "{app}\install_guncabxml.bat"; 
Filename: "{app}\install_guncab.bat"; 


 ; 指定在卸载第一步要执行以下服务脚本
[UninstallRun]
Filename: "{app}\uninstall_guncab.bat";
Filename: "{app}\mysql-5.7.28-winx64\bin\uninstall_mysql.bat";
Filename: "{app}\uninstall_redis.bat";
Filename: "{app}\uninstall_mq.bat";


;卸载程序删除除用 [Files][Dirs] 条目安装/创建外的其它文件或目录
[UninstallDelete]
Type: files; Name: "{app}\guncab.ico"


测试基本没问题,能够正常启动,关机重启也没问题,过程再优化吧。

你可能感兴趣的:(部署,使用技巧,java)