jar 打包成.exe可执行文件
要将一个 Java JAR 文件打包成可执行的 EXE 文件,可以使用 Launch4j 和 Inno Setup 来完成这个任务。
Launch4j 用于将 Java 应用程序打包为本机可执行文件(通常为 EXE 文件)的工具。它的主要作用是创建一个包装器,允许用户像运行本机 Windows 应用程序一样运行 Java 应用程序,而无需手动启动 Java 虚拟机(JVM)。 Launch4j 是一个免费的开源项目,它遵循 GNU General Public License(GPL)许可证。这意味着你可以免费使用 Launch4j 来创建可执行文件,包括商业用途。你可以从 Launch4j 的官方网站下载并使用它,无需支付许可费用。官网地址 (opens new window)
Launch4j 功能有:
- 创建本机可执行文件:Launch4j 允许你将你的 Java 应用程序打包为一个本机的可执行文件(通常是 EXE 文件)。这意味着用户可以双击该文件来运行你的 Java 应用程序,而无需手动打开命令行或 JVM。
- 自定义可执行文件属性:你可以通过 Launch4j 配置可执行文件的各种属性,如程序图标、文件版本信息、标题等。这有助于使你的 Java 应用程序看起来像本机 Windows 应用程序。
- 支持类路径和 JAR 文件:Launch4j 允许你指定应用程序的类路径和关联的 JAR 文件,以确保你的 Java 应用程序能够正常运行。
- 自动检测 Main-Class:它可以自动检测你的 JAR 文件中的 Main-Class,从而无需手动指定应用程序的入口点。
- 支持 JRE 选项:你可以选择将 JRE(Java 运行时环境)打包到生成的可执行文件中,从而用户无需安装 JRE 即可运行你的应用程序。
- 跨平台兼容性:生成的可执行文件通常只能在 Windows 上运行,但 Launch4j 可以在 Windows 上创建用于其他平台的包装器,例如 Linux 或 macOS。
Inno Setup 本身不能直接将 JAR 文件打包成 EXE 文件。所以我们要先使用 Launch4j 把 jar 打包成一个 exe 格式的可执行程序。Inno Setup 是一个免费的开源安装制作工具,它遵循许可证允许免费使用,包括商业用途。Inno Setup 的主要作用是创建用于安装和卸载 Windows 应用程序的安装程序。官网地址 (opens new window)
Inno Setup 功能有:
- 创建自定义安装程序:Inno Setup 允许开发人员创建定制的、易于使用的安装程序,用于将他们的应用程序部署到 Windows 操作系统上。你可以定义安装过程的各个方面,包括文件复制、注册表项、快捷方式、开始菜单项等。
- 支持多种安装任务:Inno Setup 支持各种各样的安装任务,包括简单的文件复制,注册表设置,创建快捷方式,以及执行自定义脚本和任务。这使得你可以轻松地自定义安装过程,以满足你的应用程序的特定需求。
- 脚本化:Inno Setup 使用基于脚本的语言来定义安装过程。这意味着你可以编写脚本来描述安装程序的行为,使其非常灵活。Inno Setup 使用类似于 Pascal 的脚本语言。
- 多语言支持:Inno Setup 支持多种语言,允许你为不同的用户群体创建多语言安装程序,以提供本地化的安装和卸载体验。
- 卸载支持:Inno Setup 不仅可以创建安装程序,还可以生成卸载程序,允许用户从他们的计算机上卸载你的应用程序。
# 使用 Launch4j
Launch4j 把 jar 包装成 .exe 程序还是有所局限的,比如启动方式只能是 java -jar,如果配合混淆就没有办法
# Basic
在这里配置路径等信息
Output file: 填写把 jar 打成.exe 程序的输出路径
jar:选择自己要打包的 jar
# JRE
在这里配置 JVM,JDK 版本等信息
JRE paths:不需要我们填
Min JRE version:最低 JDK 版本
Max JRE version:最高 JDK 版本
JVM option:设置 JVM 启动参数
# console
设置 console
# 使用 Inno Setup
Inno Setup 还是有些难度的,需要学习里面的各个关键字,回调,事件等,才能掌握 Inno Setup 的使用
以下贴一个简单的 Inno Setup 示例
;配置和描述安装程序的整体设置和行为
[Setup]
; 应用名称
AppName=Easy-Manager-Tool
; 应用版本
AppVersion=1.0
; 默认安装目录 {pf}为 Program Files 这个路径是类似于 C:\Program Files 的形式
DefaultDirName={pf}\emt
; 应用输出到文件路径
OutputDir=C:\Users\User\Desktop\tool\gen
; 输出文件的名称
OutputBaseFilename=emt
; 指定应用程序的发布者或公司名称
AppPublisher=
; 应用程序发布者的网站或URL
AppPublisherURL=
; 创建目录 {app} 当表应用所在的路径
[Dirs]
Name: "{app}\go"; Permissions: everyone-full
; 添加文件
[Files]
Source: "C:\Users\User\Desktop\build\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; 注册表
[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "Path"; ValueData: "{olddata};{app}\jdk\bin"
; 运行脚本
[Run]
Filename: "{sys}\cmd.exe"; Parameters: "/C setx PATH ""{app}\go\bin;%PATH%"""; Flags: runasoriginaluser; StatusMsg: "Setting PATH for Go..."; Check: not Is64BitInstallMode
Filename: "{app}\runBuild.bat"; Description: "runBuild.bat";
Filename: "cmd.exe"; Parameters: "/c setx PATH ""%PATH%;{app}\jdk\bin"" /m"; Flags: runhidden; WorkingDir: {app}; StatusMsg: "Updating PATH environment variable..."
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Setup
用于配置和描述安装程序的整体设置和行为。在 [Setup] 部分中,你可以指定各种安装程序的属性,例如应用程序名称、版本号、安装目录、输出目录等。以下是 [Setup] 可以描述的一些重要内容:
- AppName:这个选项用于指定安装程序的应用程序名称。它将在安装过程中显示给用户,通常用于在开始菜单、卸载项等位置显示应用程序的名称。
- AppVersion:用于定义安装程序的版本号。这可以是你的应用程序的实际版本号,以帮助用户了解安装的内容。
- DefaultDirName:指定默认的安装目录。可以使用预定义的常量(如 {pf} 代表 Program Files 目录),或者指定一个具体的路径。
- OutputDir:定义生成安装程序的输出目录。这是指定生成的安装文件(通常是 .exe 文件)将被保存的位置。
- OutputBaseFilename:指定生成的安装程序的文件名,通常是一个 .exe 文件。这将是用户运行的实际安装程序文件的名称。
- AppPublisher:用于指定应用程序的发布者或公司名称,它将在安装过程中显示。
- AppPublisherURL:可用于提供应用程序发布者的网站或 URL,这也将在安装过程中显示。
- AppSupportURL:可以包含支持或帮助信息的 URL。
- AppUpdatesURL:如果有关于应用程序更新的信息或 URL,可以在这里指定。
- AppMutex:用于指定应用程序的互斥体名称,以确保在安装过程中只能运行一个实例。
- DefaultGroupName:定义开始菜单中应用程序快捷方式的默认组名。
- AllowUNCPath:指定是否允许安装到 UNC 路径(网络共享路径)。
- UninstallDisplayIcon:定义卸载程序的显示图标。
- UninstallDisplayName:指定卸载程序的显示名称。
- UninstallString:定义卸载程序的执行命令。
# Dirs
用于定义在用户计算机上创建的目录结构。通过 [Dirs] 部分,你可以指定要在目标计算机上创建的目录,以便在安装过程中将文件复制到这些目录中。以下是 [Dirs] 可以描述的内容:
- 目录名称:在 [Dirs] 部分中,你可以列出要创建的目录的名称。这些目录名称通常是相对于安装目录(由 [Setup] 部分的 DefaultDirName 指定)的相对路径。
- Permissions:你可以为每个目录指定权限,例如读、写、执行权限。这允许你控制用户是否可以访问或修改这些目录中的文件。
- Subdirectories:你可以定义子目录,以便在目录创建时同时创建子目录。这有助于构建复杂的目录结构
# Files
用于指定要在安装过程中包含的文件和它们的安装目标。通过 [Files] 部分,你可以定义要复制到目标计算机上的文件、文件的源路径和文件的目标路径,以及其他文件相关的属性。以下是 [Files] 可以描述的内容:
- Source:这个字段指定了要复制的文件的源路径。你可以指定完整的文件路径,也可以使用通配符来包括多个文件。
- DestDir:用于指定文件的目标目录。这是文件在用户计算机上的最终安装位置。
- DestName:指定文件在目标计算机上的名称。这可以是与源文件不同的名称。
- Check:这个字段允许你定义文件的检查方法,以确保文件在复制到目标计算机上时没有被更改或损坏。
- Permissions:你可以为每个文件定义权限,包括文件的读、写、执行权限。这允许你控制用户对文件的访问权限。
- Attribs:允许你为文件定义属性,如只读、隐藏等。
- FontInstall:如果你的安装程序包含字体文件,你可以使用这个字段来安装字体文件并注册它们。
- Flags:用于指定与文件相关的特定标志,例如创建快捷方式。
# Registry
用于在 Windows 注册表中创建、修改或删除键和值。通过 [Registry] 部分,你可以配置你的安装程序在用户计算机上创建注册表项,以存储应用程序的配置信息、关联文件扩展、文件关联等等。以下是 [Registry] 可以描述的内容:
- Root:指定注册表项的根键,通常是 HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER。不同的根键对应不同的部分,例如 HKEY_LOCAL_MACHINE 用于系统范围的设置,而 HKEY_CURRENT_USER 用于当前用户的设置。
- Subkey:指定注册表项的子键路径。这是注册表中的目标位置。
- ValueName:定义注册表值的名称。这可以是一个字符串,通常用于存储应用程序的配置信息。
- ValueType:指定注册表值的类型,如字符串、整数等。
- ValueData:定义注册表值的数据。这是实际的值,可以是文本、数字等。
- Flags:用于指定注册表项和值的属性,例如创建、删除、覆盖等。
- Permissions:你可以定义注册表项的权限,以确保只有具有适当权限的用户才能访问或修改注册表项。
# Run
用于在安装过程中指定要运行的可执行文件、脚本或其他程序。通过 [Run] 部分,你可以配置安装程序在安装完成后或卸载程序时执行的操作。以下是 [Run] 可以描述的内容:
- Filename:指定要运行的文件的路径,这可以是一个可执行文件(.exe)、脚本(.bat、.cmd、.vbs 等)或其他程序。
- Parameters:定义要传递给运行文件的参数或命令行参数。这允许你向运行的程序传递额外的信息。
- WorkingDir:指定运行文件时的工作目录。这是运行文件所在的目录。
- Description:提供一个可选的描述,以便在安装过程中显示或记录此操作。
- Flags:用于指定运行操作的标志,例如是否等待运行的程序完成。
- StatusMsg:定义在执行此操作时要显示给用户的状态消息。