|
windows一键部署java项目 因为公司需求,要在windows的环境上做一键部署启动java项目,同时还要支持从安装界面动态修改配置文件的IP地址。就像安装软件一样将jdk,tomcat,mysql,influxdb,nginx安装并配置到系统上,顺便还要初始化一下数据。花了一周的时间,这里记录我的踩坑日志。 准备工作
磨刀不误砍柴工,选择好工具可以事半功倍。 Inno Setup基础使用
Inno Setup的模版几乎一样,通过官方提供的innosetup-QSP.exe 可以帮助我们快速生成模版。但如果需要自定义界面,那你可就要挠挠头呢。比如我现在的需求是在安装的过程中添加一个有输入框的界面,并且能将输入的值替换指定配置文件中的指定内容,安装成功后在桌面生成快捷键。 千篇一律的iss文档:
#define MyAppName "自定义程序名称"
#define MyAppVersion "V1.0"
#define MyAppPublisher "自定义程序出版商"
#define MyAppURL "http://www.xxxx.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-5.6.1.exe 工具自动生成
AppId={{0167D65D-549A-4BA3-B88A-4814EC5A1D35}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; 默认安装路径
DefaultDirName=C:\Program Files\ITDragon\
DefaultGroupName={#MyAppName}
; 软件名称
OutputBaseFilename=ITDragon
; 软件图标
SetupIconFile=C:\Users\Long\Desktop\ok\ITDragon\itdragon.ico
; 压缩方式
Compression=lzma
; yes 可以使文件更小
SolidCompression=yes
; 必需有管理员权限才能安装
PrivilegesRequired=admin
; 安装密码
;Password=itdragon
; 开启加密,需要一个iscrypt.dll文件,网上有下载的
;Encryption=yes
; 语言配置
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
; 安装文件
[Files]
; 安装部署的源文件路径
Source: "C:\Users\Long\Desktop\ITDragon\*"; 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
Name: "{commondesktop}\Mysql数据初始化脚本"; Filename: "{app}\mysql\init-data.bat"
Name: "{commondesktop}\安装须知"; Filename: "{app}\安装须知.doc"
; 程序安装成功后执行脚本
[Run]
Filename: "{app}\tomcat\init-jdk.bat";
Filename: "{app}\tomcat\bin\init-tomcat.bat";
Filename: "{app}\mysql\bin\init-mysql.bat";
; 在安装的时候输入IP地址,动态将localhost修改为输入值
[Code]
var
myPage:TwizardPage;//自定义窗口
ed1:TEdit;//自定义输入框
Lbl1: TNewStaticText;//自定义标题
//初始化引导窗口
procedure InitializeWizard();
begin
myPage:=CreateCustomPage(wpWelcome, '配置服务IP地址', '请输入正确的IP地址,已确保服务的正常使用');
Lbl1 := TNewStaticText.Create(myPage);
Lbl1.Left := ScaleX(5);
Lbl1.Top := ScaleY(5);
Lbl1.Width := ScaleX(250);
Lbl1.Height := ScaleY(50);
Lbl1.Caption := 'IP地址输入框标题';
Lbl1.Parent := myPage.Surface;
ed1:=TEdit.Create(myPage);
ed1.Width:=ScaleX(410);
ed1.Top := ScaleY(25);
ed1.Text :='127.0.0.1';
ed1.Parent:=myPage.Surface;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
fileName:String;
svArray: TArrayOfString;
nLines,i:Integer;
begin
//复制文件后执行
if CurStep = ssPostinstall then
begin
fileName := ExpandConstant('{app}\nginx\html\main.bundle.js');
LoadStringsFromFile(fileName, svArray);//读取文件
nLines := GetArrayLength(svArray);
for i := 0 to nLines - 1 do
if (0 < Pos('localhost', svArray[i])) then//查找目标
StringChange(svArray[i], 'localhost', ed1.Text);
SaveStringsToUTF8File(fileName, svArray, false);
end;
end;
注意: 配置JDK环境变量
在做这个需求的时候,看了几篇文章,发现他们都把jdk放在Tomcat目录中,第一次做的时候也傻乎乎的放在Tomcat目录中,其实没必要。而且目前主流的springboot项目都是内嵌tomcat。新建一个bat脚本用来运行java程序java -jar xxx.jar安装成功后在桌面生成一个快捷键,让用户双击启动服务。如果你有更合理的方法,可以教教我!!! @echo off echo cd .. echo "%~dp0" echo "%cd%" set jdkpath=%cd%\tomcat\bin\java\jdk 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 Tomcat安装部署需要将init-tomcat.bat文件放在tomcat/bin目录下,有博客说要修改service.bat文件,我没有修改依然可以正常启动。在看别人的博客的时候,遇到不明白的地方可以先试着跳过去。我就傻乎乎的下了一个tomcat6,对比两者有什么区别...... echo -------tomcat begin-------- call "%~dp0%service.bat" install tomcat8 echo -------tomcat install end------------------ sc config tomcat8 start= auto net start tomcat8 exit MySQL安装部署
MySQL安装需要注意两点:第一设置数据库初始密码,第二设置数据库编码格式, init-mysql.bat,内容来源网络,稍作修改。 cd /d %~dp0 cd .. set inipath=%cd%\my.ini cd bin "%cd%\mysqld.exe" -install mysql --defaults-file="%inipath%" "%cd%\mysqld.exe" --initialize-insecure --user=mysql --console net start mysql sc config mysql start=auto net stop mysql net start mysql echo 安装完毕 "%cd%\mysqladmin.exe" -u root password root echo 修改密码完毕 cd .. "%cd%\bin\mysql.exe" -uroot -proot < "%cd%\sqlfile\initMysql.sql" echo 数据库初始化完成 pause; initMysql.sql,用来创建数据库和设置编码。MySQL启动成功后,我们还是要进去执行show variables like '%char%;'看看是不是统一修改成了utf8 create database IF NOT EXISTS itdragon_data character set utf8; set global character_set_database=utf8; set global character_set_server=utf8; 遇到的坑有了Inno Setup工具,一键部署配置web项目变的很简单,只需要将部署的资源压缩成exe文件,然后点击exe文件待安装成功后执行自动运行bat文件初始化配置即可。可我依然花了很长的时间。原因有几点: 一)、开始安装的环境是Windows Server 2008,安装MySQL5.7失败,原因是不支持MySQL5.7提供的高级读写锁。后来换成了MySQL5.6安装成功 二)、MySQL5.6启动服务失败1067,网上也有很多解决方法,没有一个成功。无奈换了WIndows Server 2012 r2,结果一次成功。 三)、对Inno Setup函数使用不熟,资源文件太大,每次编译调试要等待半小时。 文章到这里就结束了,InfluxDB和Nginx就更简单了,一样的逻辑。希望大家把时间用到正确的地方。如果觉得不错可以点个"推荐"
参考文章: https://blog.csdn.net/dj0721/article/details/72462688 (责任编辑:IT) |

