前段時間老大看我很閒...而後給我下達了一項很重要的任務:windows一鍵部署,須要把服務(jdk、tomcat、mysql、jar包、前端壓縮包)打成一個exe應用程序,點擊安裝會啓動全部服務,打開瀏覽器http://localhost:8080/xxx就能夠訪問系統了,運維人員一鍵安裝便可省去了環境搭建和部署的時間。聽後感受很神奇,網上找了找確實有這種案例,因而我就開始了學習和實踐,一週以後不辱使命,完美地完成任務能夠去交差了
php
jdk用的1.8免安裝版,只須要將安裝好的jdk拷貝一份便可。下載地址html
tomcat用的8版本,下載後綴windows-x64.zip的免安裝版。下載地址前端
mysql用的5.7.24免安裝版,高版本有不少問題(如不須要mysql,刪除其相關代碼便可)。下載地址java
Inno Setup6,一款爲Windows程序提供的免費安裝程序,經過它能夠將須要的文件壓縮打包成exe安裝程序,而後像安裝程序同樣解壓到另一個環境中。下載地址mysql
編輯腳本前先來簡單學習一些cmd命令sql
cd:進入 "%cd%":當前目錄 echo:打印輸出 exit:退出 pause:按下任意鍵繼續。。。數據庫
init-path.batapache
echo 配置jdk環境變量開始 cd ..\jdk echo "%cd%" set jdkpath=%cd% 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 "%Path%;%%JAVA_HOME%%\bin" ) echo 配置jdk環境變量完畢 echo 配置mysql環境變量開始 cd ..\mysql echo "%cd%" set mysqlpath=%cd% echo %mysqlpath% setx MYSQL_HOME "%mysqlpath%" -m echo %Path% echo %Path%|find /i "%MYSQL_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%;%%MYSQL_HOME%%\bin" /f ) echo 配置mysql環境變量完畢 exit
設置mysql的環境變量是由於可使用mysql命令,以防sql腳本沒初始化成功方便查找緣由。例如:在mysql安裝路徑的bin目錄下使用管理員打開cmd窗口windows
運行mysql -uroot -proot便可進入數據庫 show databases; 查看全部數據庫 use 數據庫名稱; 使用數據庫 show tables; 查看全部表瀏覽器
init-mysql.bat
echo 安裝mysql開始 cd ..\mysql set inipath=%cd%\my.ini cd bin "%cd%\mysqld.exe" -install mysql --defaults-file="%inipath%" "%cd%\mysqld.exe" --initialize-insecure --user=mysql --console echo 啓動mysql並設置爲自啓動 net start mysql sc config mysql start=auto "%cd%\mysqladmin.exe" -u root password root echo 修改密碼完畢 cd .. "%cd%\bin\mysql.exe" -uroot -proot < "%cd%\SqlFile\test.sql" echo 數據庫初始化完成 exit
my.ini
[client] port=3306 default-character-set=utf8 [mysqld] wait_timeout=2880000 interactive_timeout = 2880000 max_allowed_packet = 100M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
start.bat
echo 安裝tomcat執行service.bat腳本 cd ..\tomcat\bin echo "%cd%" call "%cd%\"%service.bat install tomcat8 echo -------tomcat install end------------------ echo 啓動tomcat服務 sc start tomcat8 wmic service where name="tomcat8" startservice pause; echo 啓動java服務 cd ..\..\tool echo "%cd%" set APP_NAME=java.jar setlocal enabledelayedexpansion set port=9091 echo find run port: %port% process for /f "tokens=1-5" %%a in ('netstat -ano ^| find ":%port%"') do ( if "%%e%" == "" ( set pid=%%d echo The process pid '!pid!' has been released ) else ( set pid=%%e echo the process pid for the current port is '!pid!' ) echo !pid! taskkill /f /pid !pid! ) echo 5 seconds close this bat echo Starting program %APP_NAME% java -Xms2048m -Xmx5120m -server -jar %APP_NAME% echo run %APP_NAME% Success pause
沒有將tomcat放在install文件安裝時啓動服務是由於第一次安裝後tomcat服務老是起不來(打開任務管理器點擊服務搜索tomcat8,卸載程序——>服務器重啓再次安裝就會出現這個問題),黑窗口也沒看到錯誤信息,爲了完美安裝,無奈只好放在和jar包啓動腳本一塊兒了。
Inno Setup在安裝後的根目錄下建立一個後綴.iss的文件,代碼以下。
編輯完成後,點擊上方Build——>Compile,等待完成打包,輸出在同級目錄下的Output文件
#define MyAppName "XXX管理系統" #define MyAppVersion "V1.0" #define MyAppPublisher "XXX科技有限公司" #define MyAppURL "http://www.baidu.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-6.0.5.exe 工具自動生成 AppId={{0167D65D-549A-4BA3-B88A-4814EC5A1D35} AppName={#MyAppName} AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} ; 默認安裝路徑 DefaultDirName=C:\Program Files (x86)\program\ DefaultGroupName={#MyAppName} ; 軟件名稱 OutputBaseFilename=deployment ; 軟件圖標 SetupIconFile=C:\Users\Administrator\Desktop\program\tool\download.ico ; 壓縮方式 Compression=lzma ; yes 可使文件更小 SolidCompression=yes ; 必需有管理員權限才能安裝 PrivilegesRequired=admin ; 安裝密碼 ;Password=password ; 開啓加密,須要一個iscrypt.dll文件,網上有下載的 ;Encryption=yes ; 語言配置 [Languages] Name: "chinesesimp"; MessagesFile: "compiler:Default.isl" ; 安裝文件 [Files] ; 安裝部署的源文件路徑 Source: "C:\Users\Administrator\Desktop\program\*"; 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:8080/dist Name: "{commondesktop}\運行XXX管理系統應用程序"; Filename: "{app}\tool\start.bat" Name: "{commondesktop}\安裝須知"; Filename: "{app}\tool\安裝須知.txt" ; 程序安裝成功後執行腳本 [Run] Filename: "{app}\install\init-path.bat"; Filename: "{app}\install\init-mysql.bat"; [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone ; 程序卸載成功後執行腳本 [UninstallRun] Filename:"{app}\uninstall\uninstall.bat"; ; 程序卸載成功後刪除文件 [UninstallDelete] Type:filesandordirs;Name:"{app}\mysql" Type:filesandordirs;Name:"{app}\tomcat" Type:filesandordirs;Name:"{app}\install" Type:filesandordirs;Name:"{app}\uninstall"
如出現此錯誤,是由於安裝mysql缺乏文件,低版本 點擊下載 Visual Studio 2013,高版本 點擊下載 Visual Studio 2015
如出現此錯誤,是由於安裝mysql缺乏文件,點擊下載 解壓安裝後將vcruntime140_1.dll複製到C:\Windows\System32,卸載mysql服務從新安裝便可
運行jar包如出現此錯誤,是由於高版本的mysql須要SSL身份驗證(低版本不須要),固然也能夠不須要驗證
解決方法:鏈接數據庫的url後面加上參數便可,例如:jdbk:mysql://localhost:3306/testdb?characterEncoding=UTF-8&useSSL=false