# 一、项目基本情况介绍
本项目使用技术为javaFX+SpringBoot框架搭建的一个文件上传客户端,用于生产制造场景,整个程序需要依赖一些配置文件,本地sqlLite数据库文件,以及运行时的jre环境。
二、软件介绍
在打包之前需要先安装对应软件:
2.1 Launch4J
Launch4J 是一个 免费、开源 的跨平台工具,它的核心功能非常明确:
将 Java 应用程序(.jar
文件)包装成标准的 Windows 可执行文件(.exe
文件)
在使用launch4J打包完成之后,文件目录比较多(.db文件,.yml配置文件,.exe可执行文件),因此需要压缩后进行分发使用,不太方便,因此需要用到下面软件。
2.2 NSIS
NSIS 的核心是:让你通过编写脚本 (\*.nsi
文件) 来创建 Windows 安装程序 (\*.exe
文件)。
在.nsi 文件中,你可以指定安装目录,卸载文件等一系列内容。
三、打包步骤
3.1、项目打jar包
第一步需要将现有项目打成jar包,并可使用java命令直接启动jar包
java -jar ***.jar
3.2、使用Launch4J打包成exe文件
3.2.1、软件设置
由于我这个只有一个启动类,因此就没有指定。
注意:此处的jre目录一定要重新指定,应为在其他机器上是没有安装java的,所以要把java运行环境打包到安装文件中。
以我的项目为例:我将所有配置文件以及jar包,jre都放在同一目录下,选择时只需要按照以下填写即可,不需要加[./]等
3.2.2、按钮操作
在配置完成路径后,点击按钮,编译项目,编译成功后右侧的小三角为蓝色,然后点击执行即可
3.3、使用NSIS打包成可执行安装包
经过上述操作,恭喜你,已经可以正常使用了,但是为了方便安装,需要将所有目录文件打包成一个exe安装包。
3.3.1、编写.nsi文件
以下仅供参考,详细参数意思需自行查阅。
; 该脚本使用 HM VNISEdit 脚本编辑器向导产生 ; 安装程序初始定义常量 ; 产品名称 !define PRODUCT_NAME "pcs_file_upload" ; 产品版本 !define PRODUCT_VERSION "1.0-win64" !define PRODUCT_PUBLISHER "ty," !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\pcs_file_upload_1.0_win64.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" ; 指定文件说明 !define PRODUCT_FILE_DESCRIPTION "文件用于大文件上传操作-win32版本" ; 文件版权 !define PRODUCT_COPYRIGHT "Copyright (C) 2024 My Company" SetCompressor lzma ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------ !include "MUI.nsh" ; MUI 预定义常量 !define MUI_ABORTWARNING !define MUI_ICON "C:\Users\22832\Desktop\package\file-upload-1.0.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" ; 欢迎页面 !insertmacro MUI_PAGE_WELCOME ; 许可协议页面 ; !insertmacro MUI_PAGE_LICENSE "C:\pcs_file_upload" ; 组件选择页面 ; !insertmacro MUI_PAGE_COMPONENTS ; 安装目录选择页面 !insertmacro MUI_PAGE_DIRECTORY ; 安装过程页面 !insertmacro MUI_PAGE_INSTFILES ; 安装完成页面 !define MUI_FINISHPAGE_RUN "$INSTDIR\file-upload-1.0.exe" !insertmacro MUI_PAGE_FINISH ; 安装卸载过程页面 !insertmacro MUI_UNPAGE_INSTFILES ; 安装界面包含的语言设置 !insertmacro MUI_LANGUAGE "SimpChinese" ; 安装预释放文件 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ; ------ MUI 现代界面定义结束 ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" ; 安装包输出文件路径 OutFile "C:\Users\22832\Desktop\package\install\pcs_file_upload_1.0_win64.exe" ; 默认安装目录 InstallDir "C:\pcs_file_upload" ; 指令用于指定注册表中的一个键(key),该键将存储安装程序的安装目录路径。 ; 这通常用于在卸载程序时能够找到正确的安装位置,或者在程序运行时能够定位到安装目录中的文件。 InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" ; 指令用于控制安装过程中详细信息的显示方式。 ; 这个指令允许用户选择是否在安装过程中显示文件的复制和安装的详细步骤。 ; 使用show 或者 hide ShowInstDetails show ; 用于控制卸载过程中详细信息的显示方式。 ; 这个指令允许用户选择是否在卸载程序时显示文件的删除和卸载的详细步骤。 ; 使用show 或者 hide ShowUnInstDetails show ; 指令用于自定义安装程序界面上的品牌文本。 ; 这个文本通常显示在安装向导的标题栏或其他显著位置,以便用户可以看到是哪个公司或产品正在安装。 BrandingText " " Section "MainSection" SEC01 SetOutPath "$INSTDIR" SetOverwrite ifnewer CreateDirectory "$SMPROGRAMS\pcs_file_upload" CreateShortCut "$SMPROGRAMS\pcs_file_upload\pcs_file_upload.lnk" "$INSTDIR\file-upload-1.0-win64.exe" CreateShortCut "$DESKTOP\pcs_file_upload.lnk" "$INSTDIR\file-upload-1.0-win64.exe" File "C:\Users\22832\Desktop\package\pcs_file_upload.db" File "C:\Users\22832\Desktop\package\file-upload-1.0-win64.exe" File "C:\Users\22832\Desktop\package\application-prod.yml" File "C:\Users\22832\Desktop\package\application.yml" File /r "C:\Users\22832\Desktop\package\JRE_" SectionEnd Section -AdditionalIcons CreateShortCut "$SMPROGRAMS\pcs_file_upload\Uninstall.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\AppMainExe.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\AppMainExe.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" SectionEnd #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--# ; 区段组件描述 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "" !insertmacro MUI_FUNCTION_DESCRIPTION_END /****************************** * 以下是安装程序的卸载部分 * ******************************/ Section Uninstall Delete "$INSTDIR\uninst.exe" Delete "$INSTDIR\application.yml" Delete "$INSTDIR\application-prod.yml" Delete "$INSTDIR\file-upload-1.0-win64.exe" ; Delete "$INSTDIR\pcs_file_upload.db" RMDir /r "$INSTDIR\JRE" RMDir /r "$INSTDIR\logs" Delete "$SMPROGRAMS\pcs_file_upload\Uninstall.lnk" Delete "$DESKTOP\pcs_file_upload.lnk" Delete "$SMPROGRAMS\pcs_file_upload\pcs_file_upload.lnk" ; RMDir "$SMPROGRAMS\pcs_file_upload" RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" SetAutoClose true SectionEnd #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--# Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2 Abort FunctionEnd Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。" FunctionEnd
3.3.2、使用nsis打包
软件打开后如下:
将脚本文件拖入此处即可