上篇文章 : 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、文件放置
建立一个文件夹,把解压文件全部放到该目录下:
其中guncab_server文件夹下有改好名称的WinSW和jar包
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文件,并启用服务,设置开机自启动。
位置参见上图,建立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"
测试基本没问题,能够正常启动,关机重启也没问题,过程再优化吧。