• jar包打包成exe安装包


    1.介绍

            jar包启动我们通常是部署在服务器上,用户通过访问服务器来使用系统,但是如果用户想弄成电脑本端单机版,这时候部署的问题就比较麻烦了,不可能每个用户都部署一遍,那么这时候需要弄成exe安装形式,或者脚本安装形式,一键安装部署!

           现在我就介绍如何将jar包打包成exe安装包

            介绍:比如一个普通的springboot前后端分离项目,含有组件:redis,Nginx , 数据库: Mysql        

            思路:将用到的redis,Nginx,Mysql弄成windows服务,并开机自启,用户只需双击程序启动就能使用,无需等待

    2.打包配置

    1.   用到的工具: 
    2. 1.Inno Setup:Inno Setup是一个免费的安装制作软件,小巧、简便、精美是其最大特点,官方网站同时也提供源程序免费下载。它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀。(主要用来打包成exe文件格式)
    3. 2.Bat_To_Exe_Converter:可以将.bat格式的命令文件转换为exe文件
    4. 3.mysql数据库免安装版:解压后为文件夹形式,通过脚本设置mysql配置
    5. 4.jdk环境免安装版:解压后为文件夹形式
    6. 5.项目打包生成的jar包
    7. 6.redis压缩包
    8. 7.nginx压缩包

    先在本地创建一个文件夹,将解压好的mysql数据库复制到该文件夹中

    mysql配置

    1、mysql_init.bat

    在mysql/bin目录中新建mysql_init.bat

    1. @echo off
    2. rem将工作路径切换到当前脚本所在目录
    3. cd /d %~dp0
    4. rem开始安装mysql
    5. echo ----1.start installing Mysql ---->>../log.txt
    6. "%cd%\mysqld.exe" --initialize-insecure --user=mysql --console
    7. cd ..
    8. set "mysqlpath=%cd%">>../log.txt
    9. cd bin
    10. ::创建服务,名为mysql-job
    11. mysqld install mysql-job --defaults-file="%mysqlpath%\my.ini"
    12. rem设置mysql开机自启
    13. echo ----2. start Mysql service---- >>../log.txt
    14. rem pause
    15. net start mysql-job
    16. sc config mysql-job start= auto
    17. net stop mysql-job
    18. net start mysql-job
    19. rem设置mysql环境变量,并进行创建数据库初始化
    20. echo ----3.setting Mysql environment ---->>../log.txt
    21. cd ..
    22. "%cd%\bin\mysqladmin" -u root password root
    23. "%cd%\bin\mysql.exe" -uroot -proot < "%cd%\sql\create.sql"
    24. echo %Path%
    25. echo %Path%|find /i "%mysqlpath%" && set IsNull=true || set IsNull=false
    26. echo %IsNull%
    27. if not %IsNull%==true (
    28. wmic ENVIRONMENT create name="MYSQL_HOME",username="",VariableValue="%mysqlpath%"
    29. rem 追加path变量
    30. wmic ENVIRONMENT where "name='PATH' and username=''" set VariableValue="%path%;%%MYSQL_HOME%%\bin;"
    31. echo ----4. Mysql environment create/append success---->>/log.txt
    32. )
    33. exit

    2、mysql_stop.bat

    在mysql/bin目录中新建mysql_stop.bat

    1. @echo off
    2. cd /d %~dp0
    3. echo ----1.[Mysql] start uninstalling Mysql ---->>../log.txt
    4. sc stop mysql-job
    5. sc delete mysql-job
    6. echo ----2. [Mysql] uninstall finished---- >>../log.txt
    7. exit

    3、my.ini

    在mysql目录中新建my.ini

    1. [mysqld]
    2. basedir ="C:\mysql-5.7.31-winx64"
    3. datadir ="C:\mysql-5.7.31-winx64\data"
    4. port=3308
    5. server_id =10
    6. character-set-server=gbk
    7. character_set_filesystem=gbk
    8. max_allowed_packet=41942040
    9. [client]
    10. port=3308
    11. default-character-set=gbk
    12. [mysqld_safe]
    13. timezone="CST"
    14. [mysql]
    15. default-character-set=utf8

    4、新建create.sql文件,用于初始化项目数据库

    在mysql目录中新建目录sql,将create.sql文件放置其中

    注:在create.sql头部需要补充创建数据库的语句,如

    1. 一定要先删除存在的库,没有才创建
    2. DROP DATABASE IF EXISTS `XXXXX`;
    3. CREATE DATABASE XXXXX;
    4. USE XXXXX;

    3.项目配置

    在新建的文件夹中(上面mysql所在的目录),新建一个project文件夹,将解压好的jdk以及项目jar包复制到project目录中

    1、start.bat

    在project目录中新建start.bat

    1. @echo off
    2. #判断程序是否运行
    3. tasklist | find /i "aaa.exe"
    4. #判断
    5. if "%errorlevel%"=="1" (goto f) else (goto e)
    6. :f
    7. #没运行就启动,其中aaa.exe 为javaw.exe改名,目的后台启动jar包
    8. start .\jdk1.8.0_121\bin\aaa.exe -jar aaa.jar
    9. :e
    10. #运行了就执行端口判断,判断是否启动完毕
    11. netstat -ano |findstr "8084"
    12. @echo off
    13. netstat -ano |findstr "8084"
    14. if "%errorlevel%"=="1" (goto f) else (goto e)
    15. :f
    16. echo 系统安装初始化中,请等待两分钟后尝试,按回车退出!
    17. pause
    18. exit
    19. :e
    20. start Chrome\Application\chrome.exe --app=http:\\localhost:8085
    21. ::这里用谷歌浏览器打开这个网址并且用 --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文件的内容为

    1. <id>aaa
    2. aaa
    3. This service is a service created from a minimal configuration
    4. .\jdk1.8.0_121\bin\aaa
    5. -jar aaa.jar
    6. .\windows-service-logs
    7. <log mode="roll">
    8. "restart" />

    ******************注意 :.\jdk1.8.0_121\bin\aaa的这个文件是  javaw.exe复制一份并重名为 aaa.exe,目的是后台启动jar包后进程名称为aaa,用于分辨启动的jar包项目,这里的name标签是创建windows服务的服务名称

    创建regiester-service.bat

    1. @echo off
    2. rem将工作路径切换到当前脚本所在目录
    3. cd /d %~dp0
    4. rem设置aaa开机自启
    5. echo ----2. start aaa service---- >> log.txt
    6. rem pause
    7. aaaservice.exe install
    8. net stop aaa
    9. net start aaa
    10. exit

    创建uninstall-service.bat

    1. @echo off
    2. ::杀掉进程为aaa.exe
    3. taskkill -f -t -im aaa.exe
    4. @echo off
    5. rem将工作路径切换到当前脚本所在目录
    6. cd /d %~dp0
    7. ::停掉aaa的windows服务,并删除
    8. net stop aaa
    9. sc delete aaa
    10. exit

     至此jar包和mysql服务目前搞完了,现在搞用到的组件redis和nginx

    3.redis

    解压redis压缩包后,进去根目录

    修改redis配置文件,如项目中用到的redis端口和redis账号密码等。

    在根目录新建start.bat

    1. @echo off
    2. rem将工作路径切换到当前脚本所在目录
    3. cd /d %~dp0
    4. rem开始创建redis服务
    5. redis-server --service-install redis.windows-service.conf --loglevel verbose
    6. rem pause
    7. rem设置redis开机自启
    8. echo ----2. start redis service---- >>../log.txt
    9. rem pause
    10. net start redis
    11. sc config redis start= auto
    12. net stop redis
    13. net start redis
    14. exit

    在根目录新建stop.bat

    1. @echo off
    2. rem将工作路径切换到当前脚本所在目录
    3. cd /d %~dp0
    4. net stop redis
    5. 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  ,并且内容为如下

    1. <service>
    2. <id>nginxid>
    3. <name>nginxname>
    4. <description>This service is a service created from a minimal configurationdescription>
    5. <executable>.\nginx.exeexecutable>
    6. <stopexecutable>.\nginx.exe -s stopstopexecutable>
    7. <logpath>.\service-logslogpath>
    8. <log mode="roll">log>
    9. service>

    其中logpath为存放日志位置

    具体的配置可参考github

    1.新建nginx-service.bat

    1. @echo off
    2. rem将工作路径切换到当前脚本所在目录
    3. cd /d %~dp0
    4. rem设置nginx开机自启
    5. echo ----2. start nginx service---- >> log.txt
    6. rem pause
    7. nginxservice.exe install
    8. net stop nginx
    9. net start nginx
    10. exit

    2.新建start.bat

    1. @echo off
    2. rem将工作路径切换到当前脚本所在目录
    3. cd /d %~dp0
    4. rem开始创建redis服务
    5. nginx.exe
    6. rem pause
    7. exit

    3.新建stop.bat

    1. @echo off
    2. rem将工作路径切换到当前脚本所在目录
    3. cd /d %~dp0
    4. net stop nginx
    5. start nginx.exe -s stop
    6. sc delete nginx

    至此nginx配置完成

    4.项目打包

    先安装好Inno steup程序,在新建的文件夹中(上面mysql所在的目录),新建一个inno.iss文件

    打开inno.iss文件,改配置内容

    1. ; Script generated by the Inno Setup Script Wizard.
    2. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
    3. [Setup]
    4. ; 脚本由 Inno Setup 脚本向导 生成!
    5. ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
    6. ;app名称
    7. #define MyAppName "aaaa"
    8. ;app版本号
    9. #define MyAppVersion "1.0"
    10. ;app作者
    11. #define MyAppPublisher "rz"
    12. ;app访问路径
    13. #define MyAppURL "http://localhost:8085"
    14. ;app工具名
    15. #define MyAppExeName "aaaa.exe"
    16. [Setup]
    17. ; 注: AppId的值为单独标识该应用程序。
    18. ; 不要为其他安装程序使用相同的AppId值。
    19. ; (生成新的GUID,点击 工具|在IDE中生成GUID。)
    20. AppId={{6CEE70A6-5DBD-43FF-9449-466A574C65E2}
    21. AppName={#MyAppName}
    22. AppVersion={#MyAppVersion}
    23. ;AppVerName={#MyAppName} {#MyAppVersion}
    24. AppPublisher={#MyAppPublisher}
    25. AppPublisherURL={#MyAppURL}
    26. AppSupportURL={#MyAppURL}
    27. AppUpdatesURL={#MyAppURL}
    28. DefaultDirName={pf}\{#MyAppName}
    29. DefaultGroupName={#MyAppName}
    30. ;生成的exe文件输出路径
    31. OutputDir=C:\Users\HP\Desktop
    32. ;生成的exe文件名
    33. OutputBaseFilename=violation
    34. Compression=lzma
    35. SolidCompression=yes
    36. ;AlwaysRestart=yes
    37. ;PrivilegesRequired=admin
    38. [Languages]
    39. Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
    40. [Tasks]
    41. Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
    42. ;读取源文件,并打包
    43. [Files]
    44. Source: "C:\Users\HP\Desktop\新建文件夹\mysql-5.7.31-winx64\*"; DestDir: "{app}\mysql-5.7.31-winx64"; Flags: ignoreversion recursesubdirs createallsubdirs
    45. Source: "C:\Users\HP\Desktop\新建文件夹\project\*"; DestDir: "{app}\project"; Flags: ignoreversion recursesubdirs createallsubdirs
    46. ; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
    47. [Icons]
    48. Name: "{commondesktop}\管理系统";Filename: "{app}\project\start.exe"; WorkingDir: "{app}\project"
    49. [INI]
    50. ;修改数据库配置文件
    51. Filename:"{app}\mysql-5.7.31-winx64\my.ini";Section:"mysqld";Key:"basedir"; String:"{app}\mysql-5.7.31-winx64"
    52. Filename:"{app}\mysql-5.7.31-winx64\my.ini";Section:"mysqld";Key:"datadir"; String:"{app}\mysql-5.7.31-winx64\data"
    53. Filename:"{app}\mysql-5.7.31-winx64\my.ini";Section:"mysqld";Key:"port"; String:"3306"
    54. Filename:"{app}\mysql-5.7.31-winx64\my.ini";Section:"client";Key:"port"; String:"3306"
    55. ;安装时候执行的命令
    56. [Run]
    57. Filename: "{app}\mysql-5.7.31-winx64\bin\mysql_init.bat";
    58. Filename: "{app}\project\redis\start.bat";
    59. Filename: "{app}\project\nginx-1.18.0\nginx-service.bat";
    60. Filename: "{app}\project\regiester-service.bat";
    61. ;卸载时执行的命令
    62. [UninstallRun]
    63. Filename: "{app}\mysql-5.7.31-winx64\bin\mysql_stop.bat";
    64. Filename: "{app}\project\redis\stop.bat";
    65. Filename: "{app}\project\nginx-1.18.0\stop.bat";
    66. Filename: "{app}\project\uninstall-service.bat";
    67. [UninstallDelete]
    68. Type:filesandordirs;Name:"{app}"

    注意:配置文件中的地址需要根据自己本地的实际环境进行修改

    例如:
    OutputDir=C:\Users\HP\Desktop (该路径为生成exe程序的目录)
    Source: “C:\Users\HP\Desktop\新建文件夹\mysql-5.7.31-winx64*” (该路径为本地新建的文件夹的地址)

    将配置调整好之后,直接点击运行图标进行程序打包

     打包完成会自动在OutputDir目录下生成一个exe程序,并提示安装。该程序安装过程中,会自动安装mysql数据库,执行初始化sql导入,安装完成后,电脑桌面会生成程序的快捷方式,运行会执行project中创建的start.exe程序,也就是将jar包运行起来,启动项目。

  • 相关阅读:
    语言模型的发展
    【Openxml】如何为OpenXml元素创建超链接
    国产CAE软件(流体、结构仿真、优化、数据建模)免费线上培训课程报名通知
    JDK1.8新特性---Stream API
    【深入理解C++】内存布局
    linux的常用命令
    水表数字识别5:Android实现水表数字识别(含源码 可实时检测)
    centos7 网卡聚合bond0模式配置
    生成.pkl文件,读取.pkl文件的内容
    MASA Auth - SSO与Identity设计
  • 原文地址:https://blog.csdn.net/qq_38623939/article/details/125843247