杰瑞科技汇

Eclipse Java项目如何打包成可执行jar?

为什么打包会遇到问题?

在打包之前,你需要理解一个核心问题:JAR 文件本身并不知道你的代码依赖了哪些外部库(.jar 文件)

Eclipse Java项目如何打包成可执行jar?-图1
(图片来源网络,侵删)

当你双击一个 JAR 文件运行时,JVM(Java 虚拟机)只会加载这个主 JAR 文件里的类,如果你的代码用到了第三方库(commons-lang3.jar)或者你自己的其他模块 JAR,JVM 就会找不到这些类,从而抛出 ClassNotFoundExceptionNoClassDefFoundError

打包的关键就是:如何将你的代码和它所依赖的所有资源(包括其他 JAR)打包在一起,并告诉 JVM 如何启动程序。


使用 Eclipse 的 "Export" 功能(简单但不推荐)

这是最直接的方法,适合非常简单的、没有外部依赖的“Hello World”程序。但对于任何有依赖的项目, 强烈不推荐 使用此方法,因为它几乎肯定会导致 ClassNotFoundException

适用场景:只有一个 .jar 文件,且没有任何外部依赖。

Eclipse Java项目如何打包成可执行jar?-图2
(图片来源网络,侵删)

步骤:

  1. 选中项目:在 Eclipse 的 "Package Explorer" 中,右键点击你的 Java 项目。
  2. 导出:选择 Export -> Java -> Runnable JAR file,然后点击 Next
  3. 配置
    • Launch configuration:选择你用来运行程序的配置(通常是你包含 main 方法的那个类)。
    • Export destination:选择你要生成的 JAR 文件保存的位置和文件名(C:\myapp\my-app.jar)。
    • Library handling:这是最关键的一步,默认是 Extract required libraries into generated JAR,它会将依赖的库解压并直接塞进你的主 JAR 文件里,这会导致 JAR 文件巨大,启动速度慢,且不符合 JAR 标准。
  4. 完成:点击 Finish

为什么不推荐?

  • 依赖管理混乱:所有依赖都被打成一个包,难以管理。
  • 启动慢:JVM 需要解压整个大文件才能运行。
  • 不符合标准:标准的 JAR 应该是模块化的。

使用 Maven(强烈推荐)

这是目前 Java 生态中最主流、最专业、最可靠的构建和打包方式,如果你的项目使用 Maven,打包会变得非常简单和自动化。

前提:你的项目已经配置了 pom.xml 文件,并且所有依赖都在 <dependencies> 中正确声明。

步骤:

  1. 确保 pom.xml 配置正确

    • 打包方式:在 <properties><build> 中确认打包方式是 jar(默认)。
    • 主类入口:在 <build> -> <plugins> -> <plugin> -> <configuration> 中指定你的主类。
      <build>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-jar-plugin</artifactId>
                  <version>3.2.0</version>
                  <configuration>
                      <archive>
                          <manifest>
                              <addClasspath>true</addClasspath>
                              <mainClass>com.yourcompany.yourapp.Main</mainClass>
                          </manifest>
                      </archive>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      • <mainClass>: 替换成你自己的主类全名。
      • <addClasspath>true</addClasspath>: 这个配置会告诉 Maven 在 MANIFEST.MF 文件中生成一个 Class-Path 条目,列出所有依赖的 JAR 文件。注意:这种方式生成的 Class-Path 是相对路径,在部署时可能需要调整。
  2. 执行打包命令

    • 在 Eclipse 中:右键点击 pom.xml 文件,选择 Run As -> Maven install
    • 或在命令行中:进入项目根目录(有 pom.xml 的目录),运行 mvn clean install
  3. 查找生成的 JAR

    • 打包成功后,你会在 target 目录下找到两个 JAR 文件:
      • your-app-1.0-SNAPSHOT.jar:这是你的主程序 JAR。
      • your-app-1.0-SNAPSHOT-jar-with-dependencies.jar这是你真正需要的文件! 它是一个“胖 JAR”(Fat JAR),包含了你的代码和所有依赖,可以直接运行。

如何运行生成的 JAR? 直接在命令行运行即可:

java -jar target/your-app-1.0-SNAPSHOT-jar-with-dependencies.jar

使用 Gradle(现代且灵活)

Gradle 是另一个非常流行的构建工具,比 Maven 更灵活,配置更简洁。

前提:你的项目已经配置了 build.gradle 文件,并且所有依赖都在 dependencies 中正确声明。

步骤:

  1. 确保 build.gradle 配置正确

    • 应用 Java 插件apply plugin: 'java'

    • 指定主类:在 jar 任务中指定主类。

      plugins {
          id 'java'
      }
      // 声明依赖
      dependencies {
          implementation 'org.apache.commons:commons-lang3:3.12.0'
          // ... 其他依赖
      }
      // 指定主类
      jar {
          manifest {
              attributes 'Main-Class': 'com.yourcompany.yourapp.Main'
          }
          from {
              configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
          } {
              exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA'
          }
      }
      • Main-Class: 替换成你自己的主类全名。
      • from { ... }: 这个配置会将所有依赖的 JAR 文件内容“合并”到你的主 JAR 中,生成一个“胖 JAR”。
  2. 执行打包命令

    • 在 Eclipse 中:右键点击 build.gradle 文件,选择 Run As -> Gradle Build,然后在 Tasks 中找到 buildjar 任务执行。
    • 或在命令行中:进入项目根目录,运行 gradle build
  3. 查找生成的 JAR

    • 打包成功后,你会在 build/libs 目录下找到 your-app.jar,这就是可以直接运行的“胖 JAR”。

如何运行生成的 JAR? 直接在命令行运行即可:

java -jar build/libs/your-app.jar

手动创建一个可运行的 JAR(高级)

如果你不使用 Maven 或 Gradle,也可以手动完成,这需要你手动管理所有依赖。

步骤:

  1. 创建目录结构: 在你的项目外创建一个新的文件夹,MyApp-Dist

    • MyApp-Dist/
      • lib/ (用于存放所有依赖的 JAR 文件)
      • MyApp.jar (你的主程序 JAR)
      • run.bat (Windows 启动脚本)
      • run.sh (Linux/Mac 启动脚本)
  2. 复制文件

    • 将你的主程序 JAR(通过 Eclipse Export -> JAR file 生成,不包含依赖)复制到 MyApp-Dist 目录下。
    • 将你项目中所有用到的外部 JAR 文件(比如从 Maven 仓库下载的)复制到 lib 目录下。
  3. 创建启动脚本

    • run.bat (Windows):
      @echo off
      java -cp "MyApp.jar;lib/*" com.yourcompany.yourapp.Main
      pause
    • run.sh (Linux/Mac):
      #!/bin/bash
      java -cp "MyApp.jar:lib/*" com.yourcompany.yourapp.Main
      • 注意-cp (classpath) 分隔符在 Windows 是 ,在 Linux/Mac 是 。
      • lib/* 是一个通配符,表示 lib 目录下的所有文件。
      • com.yourcompany.yourapp.Main 是你的主类全名。
  4. 运行: 双击 run.bat 或在终端中运行 ./run.sh 即可启动程序。


总结与推荐

方法 优点 缺点 推荐度
Eclipse Export 无需额外工具,操作简单 依赖管理混乱,无法正确处理依赖,生成“胖JAR”启动慢 ⭐ (仅限无依赖的极简项目)
Maven 行业标准,依赖管理清晰,自动化程度高,社区支持好 学习曲线稍陡,需要修改 pom.xml ⭐⭐⭐⭐⭐ (首选,尤其适合团队项目)
Gradle 配置更简洁灵活,性能好,是现代项目的新趋势 相对 Maven 较新,某些生态插件可能不如 Maven 成熟 ⭐⭐⭐⭐⭐ (强烈推荐,特别是新项目)
手动创建 灵活可控,不依赖构建工具 过程繁琐,容易出错,难以维护 ⭐⭐ (适合学习或极特殊场景)

最终建议: 对于任何严肃的项目,请务必使用 Maven 或 Gradle,它们不仅能解决打包问题,还能帮你管理依赖、编译代码、运行测试、生成文档,是现代 Java 开发的基石,Eclipse 对 Maven 和 Gradle 都有非常好的集成支持,上手后你会发现一切都变得简单高效。

分享:
扫描分享到社交APP
上一篇
下一篇