<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
jar包啟動我們通常是部署在伺服器上,使用者通過存取伺服器來使用系統,但是如果使用者想弄成電腦本端單機版,這時候部署的問題就比較麻煩了,不可能每個使用者都部署一遍,那麼這時候需要弄成exe安裝形式,或者指令碼安裝形式,一鍵安裝部署!
現在我就介紹如何將jar包打包成exe安裝包
介紹:比如一個普通的springboot前後端分離專案,含有元件:redis,Nginx , 資料庫: Mysql
思路:將用到的redis,Nginx,Mysql弄成windows服務,並開機自啟,使用者只需雙擊程式啟動就能使用,無需等待
用到的工具:
1.Inno Setup:Inno Setup是一個免費的安裝製作軟體,小巧、簡便、精美是其最大特點,官方網站同時也提供源程式免費下載。它雖不能與Installshield這類恐龍級的安裝製作軟體相比,但也當之無愧算是後起之秀。(主要用來打包成exe檔案格式)
2.Bat_To_Exe_Converter:可以將.bat格式的命令檔案轉換為exe檔案
3.mysql資料庫免安裝版:解壓後為資料夾形式,通過指令碼設定mysql設定
4.jdk環境免安裝版:解壓後為資料夾形式
5.專案打包生成的jar包
6.redis壓縮包
7.nginx壓縮包
先在本地建立一個資料夾,將解壓好的mysql資料庫複製到該資料夾中
1、mysql_init.bat
在mysql/bin目錄中新建mysql_init.bat
@echo off rem將工作路徑切換到當前指令碼所在目錄 cd /d %~dp0 rem開始安裝mysql echo ----1.start installing Mysql ---->>../log.txt "%cd%mysqld.exe" --initialize-insecure --user=mysql --console cd .. set "mysqlpath=%cd%">>../log.txt cd bin ::建立服務,名為mysql-job mysqld install mysql-job --defaults-file="%mysqlpath%my.ini" rem設定mysql開機自啟 echo ----2. start Mysql service---- >>../log.txt rem pause net start mysql-job sc config mysql-job start= auto net stop mysql-job net start mysql-job rem設定mysql環境變數,並進行建立資料庫初始化 echo ----3.setting Mysql environment ---->>../log.txt cd .. "%cd%binmysqladmin" -u root password root "%cd%binmysql.exe" -uroot -proot < "%cd%sqlcreate.sql" echo %Path% echo %Path%|find /i "%mysqlpath%" && set IsNull=true || set IsNull=false echo %IsNull% if not %IsNull%==true ( wmic ENVIRONMENT create name="MYSQL_HOME",username="<system>",VariableValue="%mysqlpath%" rem 追加path變數 wmic ENVIRONMENT where "name='PATH' and username='<system>'" set VariableValue="%path%;%%MYSQL_HOME%%bin;" echo ----4. Mysql environment create/append success---->>/log.txt ) exit
2、mysql_stop.bat
在mysql/bin目錄中新建mysql_stop.bat
@echo off cd /d %~dp0 echo ----1.[Mysql] start uninstalling Mysql ---->>../log.txt sc stop mysql-job sc delete mysql-job echo ----2. [Mysql] uninstall finished---- >>../log.txt exit
3、my.ini
在mysql目錄中新建my.ini
[mysqld] basedir ="C:mysql-5.7.31-winx64" datadir ="C:mysql-5.7.31-winx64data" port=3308 server_id =10 character-set-server=gbk character_set_filesystem=gbk max_allowed_packet=41942040 [client] port=3308 default-character-set=gbk [mysqld_safe] timezone="CST" [mysql] default-character-set=utf8
4、新建create.sql檔案,用於初始化專案資料庫
在mysql目錄中新建目錄sql,將create.sql檔案放置其中
注:在create.sql頭部需要補充建立資料庫的語句,如
一定要先刪除存在的庫,沒有才建立 DROP DATABASE IF EXISTS `XXXXX`; CREATE DATABASE XXXXX; USE XXXXX;
在新建的資料夾中(上面mysql所在的目錄),新建一個project資料夾,將解壓好的jdk以及專案jar包複製到project目錄中
1、start.bat
在project目錄中新建start.bat
@echo off #判斷程式是否執行 tasklist | find /i "aaa.exe" #判斷 if "%errorlevel%"=="1" (goto f) else (goto e) :f #沒執行就啟動,其中aaa.exe 為javaw.exe改名,目的後臺啟動jar包 start .jdk1.8.0_121binaaa.exe -jar aaa.jar :e #執行了就執行埠判斷,判斷是否啟動完畢 netstat -ano |findstr "8084" @echo off netstat -ano |findstr "8084" if "%errorlevel%"=="1" (goto f) else (goto e) :f echo 系統安裝初始化中,請等待兩分鐘後嘗試,按回車退出! pause exit :e start ChromeApplicationchrome.exe --app=http:\localhost:8085 ::這裡用谷歌瀏覽器開啟這個網址並且用 --app目的是為了隱藏工具列和位址列,達到高度類似單機版的概念
*******注:aaaa.jar名稱修改為你專案的jar包
2、將start.bat轉換為start.exe
將下載的Bat_To_Exe_Converter工具解壓,執行Bat_To_Exe_Converter_(x64).exe程式,在工具介面中直接開啟start.bat,點選轉換即可,將轉換之後的start.exe也存放於project目錄
*******************注意:因為windows命令會出現中文編碼問題,這裡生成的快捷方式需要設定成gbk形式
下載winsw,下文有提及到,設定nginx也需要用到
將下載的exe檔案改名為aaaservice.exe,並建立一個檔名為:aaaservice.xml, 其中aaa為你定義的專案名
aaaservice.xml檔案的內容為
<service> <id>aaa</id> <name>aaa</name> <description>This service is a service created from a minimal configuration</description> <executable>.jdk1.8.0_121binaaa</executable> <arguments>-jar aaa.jar</arguments> <logpath>.windows-service-logs</logpath> <log mode="roll"></log> <onfailure action="restart" /> </service>
注意 :.jdk1.8.0_121binaaa的這個檔案是 javaw.exe複製一份並重名為 aaa.exe,目的是後臺啟動jar包後進程名稱為aaa,用於分辨啟動的jar包專案,這裡的name標籤是建立windows服務的服務名稱
建立regiester-service.bat
@echo off rem將工作路徑切換到當前指令碼所在目錄 cd /d %~dp0 rem設定aaa開機自啟 echo ----2. start aaa service---- >> log.txt rem pause aaaservice.exe install net stop aaa net start aaa exit
建立uninstall-service.bat
@echo off ::殺掉程序為aaa.exe taskkill -f -t -im aaa.exe @echo off rem將工作路徑切換到當前指令碼所在目錄 cd /d %~dp0 ::停掉aaa的windows服務,並刪除 net stop aaa sc delete aaa exit
至此jar包和mysql服務目前搞完了,現在搞用到的元件redis和nginx
3.redis
解壓redis壓縮包後,進去根目錄
修改redis組態檔,如專案中用到的redis埠和redis賬號密碼等。
在根目錄新建start.bat
@echo off rem將工作路徑切換到當前指令碼所在目錄 cd /d %~dp0 rem開始建立redis服務 redis-server --service-install redis.windows-service.conf --loglevel verbose rem pause rem設定redis開機自啟 echo ----2. start redis service---- >>../log.txt rem pause net start redis sc config redis start= auto net stop redis net start redis exit
在根目錄新建stop.bat
@echo off rem將工作路徑切換到當前指令碼所在目錄 cd /d %~dp0 net stop redis sc delete redis
4.nginx
解壓nginx壓縮包後,進去根目錄
修改nginx設定反向代理的檔案
監聽埠,跳轉到頁面
如圖
我的頁面在nginx資料夾同級
組態檔在這一級
則調轉頁面需要這樣設定
不要使用絕對路徑設定,具體層級自行根據位置調整
然後註冊nginx服務並自啟
用到工具:winsw
https://github.com/winsw/winsw/releases/tag/v3.0.0-alpha.10
下載x64完整版,第一個需要聯網使用,但我試過了報錯不行,所以最好下載完整版,避免不必要的錯誤!
下載完後將這個檔案複製到nginx根目錄,並改名為nginxservice
在nginx根目錄建立一個檔名為: nginxservice.xml ,並且內容為如下
<service> <id>nginx</id> <name>nginx</name> <description>This service is a service created from a minimal configuration</description> <executable>.nginx.exe</executable> <stopexecutable>.nginx.exe -s stop</stopexecutable> <logpath>.service-logs</logpath> <log mode="roll"></log> </service>
其中logpath為存放紀錄檔位置
具體的設定可參考github
1.新建nginx-service.bat
@echo off rem將工作路徑切換到當前指令碼所在目錄 cd /d %~dp0 rem設定nginx開機自啟 echo ----2. start nginx service---- >> log.txt rem pause nginxservice.exe install net stop nginx net start nginx exit
2.新建start.bat
@echo off rem將工作路徑切換到當前指令碼所在目錄 cd /d %~dp0 rem開始建立redis服務 nginx.exe rem pause exit
3.新建stop.bat
@echo off rem將工作路徑切換到當前指令碼所在目錄 cd /d %~dp0 net stop nginx start nginx.exe -s stop sc delete nginx
至此nginx設定完成
先安裝好Inno steup程式,在新建的資料夾中(上面mysql所在的目錄),新建一個inno.iss檔案
開啟inno.iss檔案,改設定內容
; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] ; 指令碼由 Inno Setup 指令碼嚮導 生成! ; 有關建立 Inno Setup 指令碼檔案的詳細資料請查閱幫助檔案! ;app名稱 #define MyAppName "aaaa" ;app版本號 #define MyAppVersion "1.0" ;app作者 #define MyAppPublisher "rz" ;app存取路徑 #define MyAppURL "http://localhost:8085" ;app工具名 #define MyAppExeName "aaaa.exe" [Setup] ; 注: AppId的值為單獨標識該應用程式。 ; 不要為其他安裝程式使用相同的AppId值。 ; (生成新的GUID,點選 工具|在IDE中生成GUID。) AppId={{6CEE70A6-5DBD-43FF-9449-466A574C65E2} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}{#MyAppName} DefaultGroupName={#MyAppName} ;生成的exe檔案輸出路徑 OutputDir=C:UsersHPDesktop ;生成的exe檔名 OutputBaseFilename=violation Compression=lzma SolidCompression=yes ;AlwaysRestart=yes ;PrivilegesRequired=admin [Languages] Name: "chinesesimp"; MessagesFile: "compiler:Default.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 ;讀取原始檔,並打包 [Files] Source: "C:UsersHPDesktop新建資料夾mysql-5.7.31-winx64*"; DestDir: "{app}mysql-5.7.31-winx64"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:UsersHPDesktop新建資料夾project*"; DestDir: "{app}project"; Flags: ignoreversion recursesubdirs createallsubdirs ; 注意: 不要在任何共用系統檔案上使用「Flags: ignoreversion」 [Icons] Name: "{commondesktop}管理系統";Filename: "{app}projectstart.exe"; WorkingDir: "{app}project" [INI] ;修改資料庫組態檔 Filename:"{app}mysql-5.7.31-winx64my.ini";Section:"mysqld";Key:"basedir"; String:"{app}mysql-5.7.31-winx64" Filename:"{app}mysql-5.7.31-winx64my.ini";Section:"mysqld";Key:"datadir"; String:"{app}mysql-5.7.31-winx64data" Filename:"{app}mysql-5.7.31-winx64my.ini";Section:"mysqld";Key:"port"; String:"3306" Filename:"{app}mysql-5.7.31-winx64my.ini";Section:"client";Key:"port"; String:"3306" ;安裝時候執行的命令 [Run] Filename: "{app}mysql-5.7.31-winx64binmysql_init.bat"; Filename: "{app}projectredisstart.bat"; Filename: "{app}projectnginx-1.18.0nginx-service.bat"; Filename: "{app}projectregiester-service.bat"; ;解除安裝時執行的命令 [UninstallRun] Filename: "{app}mysql-5.7.31-winx64binmysql_stop.bat"; Filename: "{app}projectredisstop.bat"; Filename: "{app}projectnginx-1.18.0stop.bat"; Filename: "{app}projectuninstall-service.bat"; [UninstallDelete] Type:filesandordirs;Name:"{app}"
注意:組態檔中的地址需要根據自己原生的實際環境進行修改
例如:
OutputDir=C:UsersHPDesktop (該路徑為生成exe程式的目錄)
Source: “C:UsersHPDesktop新建資料夾mysql-5.7.31-winx64*” (該路徑為本地新建的資料夾的地址)
將設定調整好之後,直接點選執行圖示進行程式打包
打包完成會自動在OutputDir目錄下生成一個exe程式,並提示安裝。該程式安裝過程中,會自動安裝mysql資料庫,執行初始化sql匯入,安裝完成後,電腦桌面會生成程式的快捷方式,執行會執行project中建立的start.exe程式,也就是將jar包執行起來,啟動專案。
到此這篇關於jar包打包成exe安裝包的實現的文章就介紹到這了,更多相關jar包打包成exe安裝包內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45