发布的核心概念
在开始之前,我们先明确几个概念,这能帮助你选择正确的方法:

- 目标平台: 你的程序将在哪里运行?
- 本地桌面: 在你自己的电脑或任何安装了相同操作系统的电脑上运行。
- 其他电脑: 在不同配置的电脑上运行(需要考虑依赖)。
- 服务器: 作为后台服务或 Web 应用运行。
- 目标用户: 谁会使用你的程序?
- 普通用户: 他们可能没有 Java 开发环境,需要一个“一键安装”的软件。
- 开发者: 他们有自己的 Java 环境,只需要你的代码和依赖库。
- 发布形式: 你希望交付什么?
- 可执行文件 (
.exe,.jar): 双击就能运行。 - 源代码: 只交付
.java文件。 - 安装包: 一个包含所有文件的安装程序。
- Web 应用 (WAR/EAR): 部署到 Tomcat、Jetty 等服务器上。
- 可执行文件 (
打包成可执行的 JAR 文件 (最常用)
这是最基础也是最核心的发布方式,一个可执行的 JAR 文件包含了你的编译后的 .class 文件、所有依赖的库(.jar 文件)以及一个描述如何启动程序的 MANIFEST.MF 文件。
方法 A:使用 Eclipse 导出向导 (适合初学者)
这是最直接、最简单的方法。
步骤:
-
配置主类:
(图片来源网络,侵删)- 在 Eclipse 的“包资源管理器”中,右键点击你的项目 -> Properties (属性)。
- 选择 Run/Debug Settings。
- 在右侧列表中,选择你常用的运行配置,然后点击 Edit。
- 在弹出的窗口中,确保 Main class (主类) 字段填写正确,这是你的程序入口。
- 点击 Apply and Close。
-
导出 JAR:
- 再次右键点击你的项目 -> Export... (导出)。
- 在弹出的窗口中,展开 Java 文件夹,选择 JAR file -> Next。
- Export destination: 选择一个保存位置和文件名(
MyApp.jar)。 - Export options:
- 勾选 Export generated class files and resources (导出生成的类文件和资源)。
- 勾选 Export required source files (可选,如果需要一起打包源代码)。
- 关键步骤: 确保 Export required libraries into generated JAR file 选项被选中,这会把所有依赖的库都打包进去。
- 点击 Finish。
-
运行 JAR:
- 打开命令行(
cmd或Terminal),进入到你保存 JAR 文件的目录。 - 运行命令:
java -jar MyApp.jar - 如果一切正常,你的程序应该会启动。
- 打开命令行(
方法 B:使用 Maven/Gradle (推荐用于专业项目)
如果你的项目使用 Maven 或 Gradle 构建工具,打包会更加自动化和标准化。
以 Maven 为例:

-
确保
pom.xml配置正确:- 在你的
pom.xml中,确保有maven-assembly-plugin或maven-shade-plugin。shade-plugin更常用,因为它可以处理依赖冲突并创建一个“胖 JAR”(Fat JAR / Super JAR)。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClassName>com.yourpackage.MainClass</mainClassName> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>- 重要:
<mainClassName>要替换成你自己的主类全限定名。
- 在你的
-
执行打包命令:
- 在项目根目录(有
pom.xml的目录)打开命令行。 - 运行命令:
mvn clean package - Maven 会自动编译、测试并打包,你会在
target/目录下找到一个名为your-artifact-id-version.jar的文件,这就是你的可执行 JAR。
- 在项目根目录(有
打包成可安装的桌面应用 (.exe, .dmg)
普通用户不习惯在命令行里输入 java -jar,为了让你的程序像其他软件一样“一键安装”,你需要使用第三方工具将 JAR 文件“包装”成一个原生安装包。
推荐工具:Launch4j (用于 Windows .exe)
-
准备工作:
- 你需要按照“场景一”中的方法,成功打包一个可执行的 JAR 文件。
- 下载并安装 Launch4j: https://launch4j.sourceforge.io/
-
配置 Launch4j:
- 打开 Launch4j 的 GUI 配置工具。
- Basic 选项卡:
Outfile: 选择你要生成的.exe文件的保存路径。Jar: 浏览并选择你刚刚生成的.jar文件。Don't wrap the jar: 不要勾选,这样才能把 JAR 打包进 EXE。Classpath: 通常留空,因为依赖已经在 JAR 里了。Icon: 可以选择一个.ico文件作为程序图标。
- JRE 选项卡:
Min. JRE version: 设置你的程序所需的最低 Java 版本(8.0_321)。Max. JRE version: (可选) 设置最高支持版本。
- 其他选项卡可以根据需要配置,比如设置程序信息、启动画面等。
- 点击 "Save" 保存配置,然后点击 "Compile" 编译,就会生成
.exe文件。
推荐工具:jpackage (Java 14+ 内置工具,跨平台)
如果你的 JDK 是 14 或更高版本,恭喜你,你拥有了一个官方的、强大的打包工具。
-
准备工作:
- 同样,你需要一个可执行的 JAR 文件。
- 确保你的 JAR 文件有一个正确的
Main-Class清单属性。
-
执行命令:
- 打开命令行,进入到你的 JAR 文件所在目录。
- Windows (生成 .msi 安装包):
jpackage --name MyApp --input . --main-jar MyApp.jar --main-class com.yourpackage.MainClass --type msi
- macOS (生成 .dmg 磁映像):
jpackage --name MyApp --input . --main-jar MyApp.jar --main-class com.yourpackage.MainClass --type dmg
- Linux (生成 .deb 包):
jpackage --name MyApp --input . --main-jar MyApp.jar --main-class com.yourpackage.MainClass --type deb
jpackage会自动检测操作系统并生成对应的安装包,非常方便。
发布为 Web 应用 (WAR/EAR)
如果你的程序是一个网站或需要通过浏览器访问,你需要将它打包成 WAR (Web Application Archive) 或 EAR (Enterprise Application Archive) 文件,然后部署到 Web 服务器上(如 Apache Tomcat, Jetty, JBoss/WildFly)。
步骤 (以 Tomcat 为例):
-
项目结构:
- 你的项目必须遵循 Maven 或 Gradle 的标准 Web 项目结构,最关键的是,所有 Web 相关的文件(如
index.html,images/,css/)都必须放在src/main/webapp目录下。 - 你的 Servlet 或 Controller 类放在
src/main/java的某个包下。
- 你的项目必须遵循 Maven 或 Gradle 的标准 Web 项目结构,最关键的是,所有 Web 相关的文件(如
-
配置
pom.xml(Maven):- 确保你的
pom.xml中packaging是war。 - 添加
maven-war-plugin。
<packaging>war</packaging> <build> <finalName>mywebapp</finalName> <!-- 生成的 WAR 文件名 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build> - 确保你的
-
打包 WAR:
- 在项目根目录运行命令:
mvn clean package - 你会在
target/目录下找到一个mywebapp.war文件。
- 在项目根目录运行命令:
-
部署到 Tomcat:
- 将生成的
mywebapp.war文件复制到 Tomcat 的webapps目录下。 - 启动 Tomcat 服务器。
- Tomcat 会自动解压 WAR 文件,你就可以通过浏览器访问
http://localhost:8080/mywebapp/来使用你的应用了。
- 将生成的
发布源代码
如果你想发布给其他开发者,让他们可以阅读、修改或编译你的代码。
步骤:
-
使用 Git 版本控制:
- 这是最现代、最标准的方式。
- 将你的项目代码推送到 GitHub, GitLab, Gitee 等代码托管平台。
- 其他开发者可以通过
git clone <repository-url>来获取你的完整代码历史。
-
导出项目:
- 在 Eclipse 中,右键点击项目 -> Export... -> General -> Archive File。
- 选择一个保存位置,生成一个
.zip或.tar.gz文件。 - 缺点: 这种方式只包含当前快照,没有版本历史,不利于协作。
总结与最佳实践
| 发布目标 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 开发者编译运行 | 提供源代码 + pom.xml |
灵活,易于修改和集成 | 需要用户配置开发环境 |
| 最终用户运行 (简单) | 打包成可执行 JAR | 跨平台,单个文件,依赖内嵌 | 双击无法运行,需命令行 |
| 最终用户运行 (专业) | JAR + Launch4j/jpackage | 用户体验好,像原生软件 | 需要额外工具,jpackage 需要 JDK 14+ |
| Web 应用访问 | 打包成 WAR | 标准化,部署简单,可扩展 | 需要 Web 服务器支持 |
| 开源/协作开发 | 使用 Git 托管代码 | 版本控制,协作方便,社区友好 | 需要用户了解 Git |
最佳实践建议:
- 使用构建工具 (Maven/Gradle): 从一开始就使用 Maven 或 Gradel 来管理项目依赖和构建流程,这会让你的发布过程变得异常简单和可靠。
- 明确主类: 在
pom.xml或 Eclipse 的运行配置中始终明确指定main class。 - 分离开发与发布: 开发时可以依赖本地的 Maven/Gradle 仓库,发布时务必将所有依赖打包进最终的产物(JAR 或 EXE)中,确保用户环境干净也能运行。
- 提供清晰的说明: 无论你选择哪种发布方式,都请为你的用户提供一个简单的
README.md文件,告诉他们如何安装和运行你的程序。
