杰瑞科技汇

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

最简单的情况(不依赖外部库,只有一个源文件)

如果你的项目非常简单,只有一个 .java 文件,并且没有使用任何外部的库(commons-lang3 等),Eclipse 可以一键完成。

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

步骤:

  1. 项目右键 -> Export 在你的项目名称上点击鼠标右键,在弹出的菜单中选择 Export

  2. 选择 JAR 文件格式 在弹出的 Export 窗口中,展开 Java 文件夹,然后选择 JAR file,点击 Next

  3. 配置 JAR 导出选项

    Eclipse Java项目如何打包成可运行jar?-图2
    (图片来源网络,侵删)
    • Select the export destination: 选择你想要保存 JAR 文件的路径和文件名(C:\MyProject\my-app.jar)。
    • Select the resources to export: 确保 src 文件夹(或者包含你 .java 文件的文件夹)被勾选,这会把你的源代码文件打包进去。
    • Export generated class files into source folder: 这个选项通常保持默认的 bin 文件夹,它会编译后的 .class 文件打包进去。
    • Select the export destination: 点击 Browse 选择一个保存位置,C:\MyProject\my-app.jar
  4. 完成 点击 Finish,Eclipse 会在你指定的位置生成一个 JAR 文件。

如何运行这个 JAR?

打开命令行(CMD 或 PowerShell),进入到 JAR 文件所在的目录,然后运行:

java -jar my-app.jar

包含外部依赖库(最常见的情况)

如果你的项目依赖了外部的 JAR 包(从 Maven 或 Gradle 下载的库),直接使用上面的方法会导致 ClassNotFoundException,因为 JAR 文件内部没有包含这些依赖库。

解决这个问题的最佳方式是使用 Eclipse 的 Build Path 功能

步骤:

  1. 添加依赖库到项目

    • 在你的项目上右键 -> Build Path -> Configure Build Path
    • Libraries 标签页中,点击 Add External JARs...
    • 选择你的项目所依赖的所有外部 JAR 文件,然后点击 OK,这些库现在会出现在你的 Referenced Libraries 中。
  2. 导出为可运行的 JAR

    • 项目右键 -> Export -> Java -> Runnable JAR file,然后点击 Next
    • Launch configuration: 在下拉菜单中选择你的主类,这个主类是你程序执行的入口(包含 public static void main(String[] args) 方法的类),如果下拉菜单为空,说明你的项目没有正确设置主类。
    • Export destination: 选择你想要保存的 JAR 文件路径。
    • Library handling: 这是最关键的一步!
      • Option 1: Package required libraries into generated JAR (推荐): 这是最推荐的方式,它会将所有依赖的库都打包进最终的 JAR 文件中,生成一个“胖 JAR”(Fat JAR)或“超级 JAR”(Uber JAR),这样你只需要分发这一个文件即可。
      • Option 2: Copy required libraries into a sub-folder next to the generated JAR: 这种方式会将依赖库放在一个单独的文件夹中(lib/),运行时需要配置 Classpath。
      • Option 3: Copy required libraries into the generated JAR's root folder at build time: 不推荐,容易造成混乱。
    • 选择 Option 1,然后点击 Finish
  3. 完成 Eclipse 会生成一个包含所有依赖的单一 JAR 文件。

如何运行这个 JAR?

和场景一完全一样,直接在命令行运行:

java -jar my-app.jar

使用 Maven 或 Gradle 构建项目(企业级标准)

对于任何非 trivial 的项目,手动管理依赖和构建都是不推荐的,业界标准是使用 MavenGradle,Eclipse 对它们有极好的集成支持(Maven/Gradle 插件)。

如果你使用 Maven 或 Gradle,打包过程就变得非常简单和标准化。

以 Maven 为例:

  1. 确保项目是 Maven 项目 你的项目应该有一个 pom.xml 文件,如果不是,可以在项目上右键 -> Configure -> Convert to Maven Project

  2. 配置主类 (可选,但推荐)pom.xml 文件中,添加或修改 build 插件来指定主类:

    <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">
                                    <mainClass>com.example.myapp.Main</mainClass> <!-- 替换成你的主类全名 -->
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    • 为什么用 maven-shade-plugin 而不是默认的 maven-jar-plugin
      • maven-jar-plugin 只会打包项目本身的代码,不会包含依赖。
      • maven-shade-plugin 会创建一个“胖 JAR”,它会将所有依赖库都合并进来,并且可以通过上面的配置设置 Main-Class,生成的 JAR 文件就可以直接用 java -jar 运行,这是最常用的方式。
  3. 执行打包命令

    • 在 Eclipse 中: 打开 Maven 视图(Window -> Show View -> Other -> Maven),找到你的项目,展开 Lifecycle,双击 package
    • 在命令行中: 进入项目根目录(有 pom.xml 的目录),运行 mvn clean package
  4. 找到生成的 JAR 打包成功后,你可以在 target 目录下找到一个以 -jar 结尾的文件,my-app-1.0-SNAPSHOT-jar-with-dependencies.jar,这个就是你可以直接运行的胖 JAR。


常见问题与解决方案

Q1: 运行 JAR 时提示 "no main manifest attribute, in my-app.jar"

  • 原因: 你使用的导出方式是普通的 JAR file,而不是 Runnable JAR file,或者,在 Maven/Gradle 中没有正确配置 Main-Class
  • 解决方案:
    1. 使用 Runnable JAR file 导出方式,并正确选择主类。
    2. 检查 pom.xmlbuild.gradle 文件中是否正确配置了主类。

Q2: 运行 JAR 时提示 ClassNotFoundException

  • 原因: JAR 文件中缺少运行时所需的某个依赖库。
  • 解决方案:
    1. 使用 Runnable JAR file 导出方式,并在 Library handling 中选择 Package required libraries into generated JAR
    2. 使用 Maven/Gradle 的构建工具,并使用 shadeassembly 插件来生成包含所有依赖的胖 JAR。

Q3: JAR 文件很大,包含了很多不必要的文件

  • 原因: 打包时包含了 src 目录下的源代码(.java 文件)。
  • 解决方案:
    • 在导出 JAR 时,确保只勾选了 bin 目录(编译后的 .class 文件),而不要勾选 src 目录。
    • Maven/Gradle 默认只会打包编译后的 target/classesbuild/classes,所以不会有这个问题。
场景 推荐方法 优点 缺点
简单项目 Eclipse Export -> JAR file 快速,无需额外配置 无法处理依赖,不推荐用于复杂项目
含依赖项目 Eclipse Export -> Runnable JAR file 图形化界面,操作直观 项目变大后管理困难,容易出错
企业级项目 Maven / Gradle 行业标准,依赖管理、构建流程清晰,可复用性强 需要学习构建工具的基本知识

对于任何认真的项目,请从第一天就开始使用 MavenGradle,这会为你省去未来无数的麻烦,对于临时的、小型的测试脚本,可以使用 Eclipse 的导出功能快速生成一个 JAR。

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