资讯专栏INFORMATION COLUMN

windows一键部署java项目

xbynet / 1892人阅读

摘要:一的函数,在代码块中,可以自定义很多功能来实现自定义的开发,具体可以参考在线的文档二需要用脚本配置环境变量,安装部署,安装部署。

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的模版几乎一样,如果需要自定义界面,可以在[Code]中添加代码。比如我需要在安装的过程中添加一个有输入框的自定义界面,将输入的值替换配置文件中的指定内容,安装成功后在桌面生成快捷键。
对于bat脚本语言很薄弱的我来说这里有两个难点,但依葫芦画瓢还是可以做出来的。
一)、Inno Setup的函数,在[Code]代码块中,可以自定义很多功能来实现自定义的开发,具体可以参考在线的文档
二)、需要用bat脚本配置jdk环境变量,安装部署Tomcat,安装部署MySQL。

</>复制代码

  1. #define MyAppName "自定义程序名称"
  2. #define MyAppVersion "V1.0"
  3. #define MyAppPublisher "自定义程序出版商"
  4. #define MyAppURL "http://www.xxxx.com/"
  5. ; 基本配置
  6. [Setup]
  7. ; NOTE: The value of AppId uniquely identifies this application.
  8. ; Do not use the same AppId value in installers for other applications.
  9. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
  10. ; 多带带标识,可以通过innosetup-QSP-5.6.1.exe 工具自动生成
  11. AppId={{0167D65D-549A-4BA3-B88A-4814EC5A1D35}
  12. AppName={#MyAppName}
  13. AppVersion={#MyAppVersion}
  14. AppPublisher={#MyAppPublisher}
  15. AppPublisherURL={#MyAppURL}
  16. AppSupportURL={#MyAppURL}
  17. AppUpdatesURL={#MyAppURL}
  18. ; 默认安装路径
  19. DefaultDirName=C:Program FilesITDragon
  20. DefaultGroupName={#MyAppName}
  21. ; 软件名称
  22. OutputBaseFilename=ITDragon
  23. ; 软件图标
  24. SetupIconFile=C:UsersLongDesktopokITDragonitdragon.ico
  25. ; 压缩方式
  26. Compression=lzma
  27. ; yes 可以使文件更小
  28. SolidCompression=yes
  29. ; 必需有管理员权限才能安装
  30. PrivilegesRequired=admin
  31. ; 安装密码
  32. ;Password=itdragon
  33. ; 开启加密,可能还需要一个dll文件
  34. ;Encryption=yes
  35. ; 语言配置
  36. [Languages]
  37. Name: "english"; MessagesFile: "compiler:Default.isl"
  38. ; 安装文件
  39. [Files]
  40. ; 安装部署的源文件路径
  41. Source: "C:UsersLongDesktopITDragon*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
  42. ; NOTE: Don"t use "Flags: ignoreversion" on any shared system files
  43. ; 快捷键
  44. [Icons]
  45. Name: "{group}{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
  46. Name: "{commondesktop}快捷HTTP地址"; Filename: http://localhost
  47. Name: "{commondesktop}Mysql数据初始化脚本"; Filename: "{app}mysqlinit-data.bat"
  48. Name: "{commondesktop}安装须知"; Filename: "{app}安装须知.doc"
  49. ; 程序安装成功后执行脚本
  50. [Run]
  51. Filename: "{app}
  52. omcatinit-jdk.bat";
  53. Filename: "{app}
  54. omcatininit-tomcat.bat";
  55. Filename: "{app}mysqlininit-mysql.bat";
  56. ; 在安装的时候输入IP地址,动态将localhost修改为输入值
  57. [Code]
  58. var
  59. myPage:TwizardPage;//自定义窗口
  60. ed1:TEdit;//自定义输入框
  61. Lbl1: TNewStaticText;//自定义标题
  62. //初始化引导窗口
  63. procedure InitializeWizard();
  64. begin
  65. myPage:=CreateCustomPage(wpWelcome, "配置服务IP地址", "请输入正确的IP地址,已确保服务的正常使用");
  66. Lbl1 := TNewStaticText.Create(myPage);
  67. Lbl1.Left := ScaleX(5);
  68. Lbl1.Top := ScaleY(5);
  69. Lbl1.Width := ScaleX(250);
  70. Lbl1.Height := ScaleY(50);
  71. Lbl1.Caption := "IP地址输入框标题";
  72. Lbl1.Parent := myPage.Surface;
  73. ed1:=TEdit.Create(myPage);
  74. ed1.Width:=ScaleX(410);
  75. ed1.Top := ScaleY(25);
  76. ed1.Text :="127.0.0.1";
  77. ed1.Parent:=myPage.Surface;
  78. end;
  79. procedure CurStepChanged(CurStep: TSetupStep);
  80. var
  81. fileName:String;
  82. svArray: TArrayOfString;
  83. nLines,i:Integer;
  84. begin
  85. //复制文件后执行
  86. if CurStep = ssPostinstall then
  87. begin
  88. fileName := ExpandConstant("{app}
  89. ginxhtmlmain.bundle.js");
  90. LoadStringsFromFile(fileName, svArray);//读取文件
  91. nLines := GetArrayLength(svArray);
  92. for i := 0 to nLines - 1 do
  93. if (0 < Pos("localhost", svArray[i])) then//查找目标
  94. StringChange(svArray[i], "localhost", ed1.Text);
  95. SaveStringsToUTF8File(fileName, svArray, false);
  96. end;
  97. end;

注意:
一)、如果你不需要自定义函数,[Code]代码块都可以删掉
二)、点击Inno Setup上的compile按钮开始编译,编译成功后会在一个Output目录夹生成exe文件,这个Output目录一般和iss文件在同一层。

配置JDK环境变量

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

</>复制代码

  1. @echo off
  2. echo
  3. cd ..
  4. echo "%~dp0"
  5. echo "%cd%"
  6. set jdkpath=%cd%
  7. omcatinjavajdk
  8. echo %jdkpath%
  9. setx JAVA_HOME "%jdkpath%" -m
  10. setx CLASSPATH ".;%%JAVA_HOME%%lib
  11. ools.jar;%%JAVA_HOME%%libdt.jar" -m
  12. echo %Path%
  13. echo %Path%|find /i "%java_home%" && set IsNull=true || set IsNull=false
  14. echo %IsNull%
  15. if not %IsNull%==true (
  16. reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment" /v Path /t REG_SZ /d "%Path%;%%JAVA_HOME%%in;%%JAVA_HOME%%jrein" /f
  17. setx Path "%%JAVA_HOME%%in;%Path%"
  18. )
  19. exit
Tomcat安装部署

需要将init-tomcat.bat文件放在tomcat/bin目录下,有博客说要修改service.bat文件,我没有修改依然可以正常启动。在看别人的博客的时候,遇到不明白的地方可以先试着跳过去。我就傻乎乎的下了一个tomcat6,对比两者有什么区别......

</>复制代码

  1. echo -------tomcat begin--------
  2. call "%~dp0%service.bat" install tomcat8
  3. echo -------tomcat install end------------------
  4. sc config tomcat8 start= auto
  5. net start tomcat8
  6. exit
MySQL安装部署

MySQL安装需要注意两点:第一设置数据库初始密码,第二设置数据库编码格式,
一)、初始化数据库的时候不要生成密码,方便后期修改,命令mysqld.exe --initialize-insecure --user=mysql --console
二)、数据库的编码格式要统一为utf8,网上很多方法都是在my.ini文件中配置编码格式,可MySQL5.7没有该文件,没有就创建一个。MySQL5.6如果手动创建my.ini文件可能在启动服务时有问题。
init-mysql.bat,内容来源网络,稍作修改。

</>复制代码

  1. cd /d %~dp0
  2. cd ..
  3. set inipath=%cd%my.ini
  4. cd bin
  5. "%cd%mysqld.exe" -install mysql --defaults-file="%inipath%"
  6. "%cd%mysqld.exe" --initialize-insecure --user=mysql --console
  7. net start mysql
  8. sc config mysql start=auto
  9. net stop mysql
  10. net start mysql
  11. echo 安装完毕
  12. "%cd%mysqladmin.exe" -u root password root
  13. echo 修改密码完毕
  14. cd ..
  15. "%cd%inmysql.exe" -uroot -proot < "%cd%sqlfileinitMysql.sql"
  16. echo 数据库初始化完成
  17. pause;

initMysql.sql

</>复制代码

  1. create database IF NOT EXISTS itdragon_data character set utf8;
  2. set global character_set_database=utf8;
  3. 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/liuhaom...

https://blog.csdn.net/dj0721/...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71530.html

相关文章

  • 阿里云学生服务器操作攻略(超详细全套完整图文教程!菜鸟必看!)

    摘要:第一步如何以最低价格快速买到阿里云服务器如果我是学生,我如何通过买到价值的服务答用购买云服务器是阿里云学生专属活动。除阿里云外,大多数云服务器公司例如西部等同配置云服务器的价格都在左右。例如云服务器地址等。第一步:如何以最低价格快速买到阿里云服务器?1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务?答:用¥9.9购买云服务器ECS是阿里云学生专属活动。首先,你需要在阿里云官网注...

    FuisonDesign 评论0 收藏0
  • 阿里云ECS建网站(建站)超详细全套完整图文教程! [

    摘要:首先,你需要在阿里云官网注册账号。然后在阿里云官网首页点击校园扶持,经学生认证后便可购买每月的特价云服务器。图幕布拍照如果对备案还有疑问,请参考阿里云官方文档首次备案图文引导。具体操作方式请看阿里云官方介绍镜像部署或一键安装包部署。第一步:如何以最低价格快速买到阿里云服务器?1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务? 答:用¥9.9购买云服务器ECS是阿里云学生专属活动...

    andycall 评论0 收藏0
  • 阿里云ECS建站超详细全套完整图文教程

    摘要:首先,你需要在阿里云官网注册账号。然后在阿里云官网首页点击校园扶持,经学生认证后便可购买每月的特价云服务器。图幕布拍照如果对备案还有疑问,请参考阿里云官方文档首次备案图文引导。具体操作方式请看阿里云官方介绍镜像部署或一键安装包部署。第一步:如何以最低价格快速买到阿里云服务器? 1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务? 答:用¥9.9购买云服务器ECS是阿里云学生专属活...

    Yangyang 评论0 收藏0
  • 阿里云ECS建网站(建站)超详细全套完整图文教程!菜鸟必看!

    摘要:首先,你需要在阿里云官网注册账号。然后在阿里云官网首页点击校园扶持,经学生认证后便可购买每月的特价云服务器。图幕布拍照如果对备案还有疑问,请参考阿里云官方文档首次备案图文引导。具体操作方式请看阿里云官方介绍镜像部署或一键安装包部署。第一步:如何以最低价格快速买到阿里云服务器?1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务? 答:用¥9.9购买云服务器ECS是阿里云学生专属活动...

    Baoyuan 评论0 收藏0
  • 使用 Linux 子系统部署 Node、Gradle 项目的构建工具

    摘要:最近的一个项目,由三个工程以及一个工程组成。为了使用下的各种工具提升效率,本文探讨子系统的使用及在该系统下,等工具的配置。参考链接内置子系统初体验设置环境变量并立即生效设置环境变量的方法和区别官网工具的使用简明安装教程 最近的一个项目,由三个 Gradle「Java」工程以及一个 Node「Vue.js」工程组成。为了使用 Linux 下的各种工具提升效率,本文探讨 Linux 子系统...

    frank_fun 评论0 收藏0

发表评论

0条评论

xbynet

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<