windows一键部署java项目

因为公司需求,要在windows的环境上做一键部署启动java项目,同时还要支持从安装界面动态修改配置文件的IP地址。就像安装软件一样将jdk,tomcat,mysql,influxdb,nginx安装并配置到系统上,顺便还要初始化一下数据。花了一周的时间,这里记录我的踩坑日志。

准备工作

磨刀不误砍柴工,选择好工具可以事半功倍。

一)、Inno Setup,一款为Windows程序提供的免费安装程序,通过它可以将需要的文件压缩打包成exe安装程序,然后像安装程序一样解压到另外一个环境中。官网地址

二)、虚拟机,开两台虚拟机的作用:第一可以避免玩坏自己的电脑,第二可以保证每次测试安装的环境都是干净的系统,减少一些不必要的麻烦。对电脑的性能有点要求。

三)、JDK1.8,MySQL5.7,Tomcat8,Nginx,InfluxDB等,这是需要压缩的文件资源。

四)、Windows Server 2012 R2,你值得拥有,用2008安装MySQL会很不顺。

Inno Setup基础使用

Inno Setup的模版几乎一样,通过官方提供的innosetup-QSP.exe 可以帮助我们快速生成模版。但如果需要自定义界面,那你可就要挠挠头呢。比如我现在的需求是在安装的过程中添加一个有输入框的界面,并且能将输入的值替换指定配置文件中的指定内容,安装成功后在桌面生成快捷键。

对于bat脚本语言很薄弱的我来说这里有两个难点,但依葫芦画瓢还是可以做出来的。

一)、Inno Setup的函数,在[Code]代码块中,Inno Setup提供了很多函数来折磨,以满足我们的需求。具体可以参考在线的文档

二)、需要用bat脚本配置jdk环境变量,安装部署Tomcat,安装部署MySQL。

千篇一律的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;

注意:

一)、如果你不需要自定义函数,[Code]代码块都可以删掉

二)、点击Inno Setup上的compile按钮开始编译,编译成功后会在一个Output目录夹生成exe文件,这个Output目录一般和iss文件在同一级。

配置JDK环境变量

在做这个需求的时候,看了几篇文章,发现他们都把jdk放在Tomcat目录中,第一次做的时候也傻乎乎的放在Tomcat目录中,其实没必要。而且目前主流的springboot项目都是内嵌tomcat。新建一个bat脚本用来运行java程序java -jar xxx.jar 安装成功后在桌面生成一个快捷键,让用户双击启动服务。如果你有更合理的方法,可以教教我!!!

init-jdk.bat,内容来源网络,修改时需要目录层级关系:

@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
  • 注意:实际工作中不建议配置jdk的环境变量,可以直接指定Java的全路径。这样避免破坏客户机器上原有的jdk配置。

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安装需要注意两点:第一设置数据库初始密码,第二设置数据库编码格式,

一)、初始化数据库的时候不要生成密码,方便后期修改,命令mysqld.exe --initialize-insecure --user=mysql --console

二)、数据库的编码格式要统一为utf8,网上很多方法都是在my.ini文件中配置编码格式,可MySQL5.7没有该文件,没有我们可以创建一个。但MySQL5.6如果手动创建my.ini文件可能在启动服务时有问题。

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数据库时,需要初始化数据库。我们没有必要在安装成功后初始化,因为InfluxDB是免安装的,可以在打安装包之前就把初始化的工作做好。

文章到这里就结束了,InfluxDB和Nginx就更简单了,一样的逻辑。希望大家把时间用到正确的地方。如果觉得不错可以点个"推荐"

参考文章:

https://blog.csdn.net/liuhaomatou/article/details/52576162

https://blog.csdn.net/dj0721/article/details/72462688

windows一键部署java项目的更多相关文章

  1. RedHat Linux 5.5安装JDK+Tomcat并部署Java项目

    与大家分享下RedHat Linux 5.5安装JDK+Tomcat并部署Java项目的步骤,希望对大家有用. 1.下载并安装jdk 虚拟机中安装RedHat Linux 5.5 64位企业版, 这里 ...

  2. 阿里云部署java项目

    第一步:注册阿里云账号(如果有请看第二步) 1.百度搜索阿里云,点击进入阿里云官网 2.点击右上角免费注册 3.进入注册页面,按照要求填写信息 4.注册完成后登陆 登陆之后首先购买阿里云esc与服务器 ...

  3. git jenkins 部署java项目

    1.Java项目部署基本概述:  1.什么是Java项目?  2.为什么Java项目需要使用Maven编译?  3.手动实现Java项目构建?  4.手动实现Java项目架构图? 源码包   jar包 ...

  4. Win10搭建Jenkins部署Java项目(本机和远程Win10部署)

    目录 一.前言&背景 二.环境准备 三.插件安装 四.全局配置 Maven JDK Git Maven 五.新建项目并配置 新建项目 配置 1.Discard old builds 2.Thi ...

  5. tomcat部署java项目

    tomcat部署java项目 1.启动tomcat 进入到tomcat安装目录下的bin #cd /opt/tomcat/bin #./startup.sh // 执行重启命令 2.重建一个新目录导入 ...

  6. 阿里云部署java项目参考如下链接

    http://www.cnblogs.com/softidea/p/5271746.html https://oneinstack.com/question/how-to-deploy-java-ap ...

  7. 关于weblogic部署Java项目的包冲突问题

    我们可能会用各种应用服务部署我们的Java应用,比如Tomcat.WAS.weblogic等.Tomcat和WAS可能会比较少遇到一些奇怪的问题,但是用weblogic部署项目则经常遇到一些比如包冲突 ...

  8. jenkins部署java项目,脚本文件放在远程仓库中 和jar一起打包(六)

    jenkins部署java项目到远程linux上,脚本文件和项目一起上传到gogs上,直接执行gogs上的脚本文件来执行项目 (1)新建maven项目 pom.xml的配置 <project x ...

  9. 通过Jenkins部署java项目

    部署java项目-创建私有仓库 Jenkins大多数情况下都是用来部署Java项目,Java项目有一个特点是需要编译和打包的,一般情况下编译和打包都是用maven完成,所以系统环境中需要安装maven ...

随机推荐

  1. dede首页、列表页调用非缩略图

    在include/extend.func.php末尾添加 function firstimg($str_pic) { $str_sub=substr($str_pic,0,-7).strrchr($s ...

  2. 20年硅谷技术牛人到访DataPipeline谈:技术如何与业务平衡发展

    导读:技术人员的常态是“左手支持业务签单,右手提升系统性能”,却经常陷入技术和业务该如何平衡发展的困惑?今天,且听一位硅谷牛人分享他的平衡之道. 以个人名誉申请31个国内外技术和产品专利,中国最佳CT ...

  3. activemq读取剩余消息队列中消息的数量

    先上原文链接: http://blog.csdn.net/bodybo/article/details/5647968  ActiveMQ在C#中的应用 ActiveMQ是个好东东,不必多说.Acti ...

  4. js实现语音功能

    在项目中需要对ajax请求返回的消息进行语音播报.那么什么录制的就是在太low啦.下面js贴代码 str 为返回的data //语音播报function voiceAnnouncements(str) ...

  5. SpringBoot Mybatis 使用LocalDateTime

    mybatis-spring-boot-starter 2.0.1 会报错,不知道如何解决(建议先不用) mybatis-spring-boot-starter 2.0.1 - 1.3.2 版本不会报 ...

  6. 金蝶K3外购入库单单价取数规则调整

    涉及界面: 问题:财务抱怨外购入库单价格取错,单价多除了一次税率 例如,采购单里面注明了价格是不含税15.3256 结果在外购入库单里面,又自做主张除以税率17%,把采购成本搞成了13.0988, 咨 ...

  7. MYSQL内置MYSQL数据库中你可以得到的信息

    1:help_topic  可以查看函数帮助,例如:SELECT * from help_topic WHERE name='concat' 可以查看concat函数. 2:SLOW_LOG 慢查询日 ...

  8. 使用 JS 输出螺旋矩阵

    关于螺旋矩阵 这是我曾经遇到过的面试题,在 LeetCode 上找到了题目的原型,难度中等.题目描述如下: 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中 ...

  9. zcu102 hdmi example(二)

    1.概述 上篇说到,调用跑HDMI IP核自带的design example,跑出来的结果是显示屏显示彩条,并伴有嘀,嘀,嘀...的声音.因为在实际项目中,我们只需要图像,不需要声音的,所以我要把声音 ...

  10. leetcode 678. Valid Parenthesis String

    678. Valid Parenthesis String Medium Given a string containing only three types of characters: '(', ...