杰瑞科技汇

Eclipse如何将Java项目打包成可运行的jar文件?

核心概念

在开始之前,我们需要理解几个关键点:

Eclipse如何将Java项目打包成可运行的jar文件?-图1
(图片来源网络,侵删)
  1. JAR (Java Archive):本质上是一个 ZIP 格式的压缩包,包含了你的 .class 文件、资源文件(如图片、配置文件等)和 META-INF 目录下的清单文件。
  2. Main-Class:这是 JAR 文件清单文件中的一个特殊属性,它告诉 Java 虚拟机(JVM)当使用 java -jar 命令运行这个 JAR 文件时,应该从哪个类开始执行,这个类必须包含一个 public static void main(String[] args) 方法。
  3. 依赖项:你的项目可能依赖外部的库(JAR 文件),Log4j、Jackson 等,这些依赖项也需要被包含进最终的 JAR 中,否则程序会因为找不到类而抛出 ClassNotFoundException

使用 Eclipse 的内置导出功能(简单项目)

如果你的项目非常简单,只有一个源文件,没有依赖任何外部库,这是最快的方法。

步骤:

  1. 准备项目

    • 确保你的项目已经成功编译,没有错误。
    • 在你的主类(包含 main 方法的类)上,右键 -> Run As -> Java Application,确保程序可以正常运行。
  2. 打开导出向导

    Eclipse如何将Java项目打包成可运行的jar文件?-图2
    (图片来源网络,侵删)
    • 在 Eclipse 的 Package Explorer 视图中,右键点击你的项目。
    • 选择 Export (导出)。
  3. 选择导出类型

    • 在弹出的窗口中,展开 Java 文件夹,选择 Runnable JAR file(可运行的 JAR 文件),然后点击 Next
  4. 配置 JAR 导出选项

    • Launch configuration:选择你之前用来运行项目的配置,如果你只用一个 main 方法,通常它会自动选中,你可以通过点击 Search... 按钮来查找或创建。
    • Export destination:选择你想要保存 JAR 文件的位置和文件名(C:\MyProject\my-app.jar)。
    • Library handling:这是最关键的一步,对于没有外部依赖的项目,选择 Extract required libraries into generated JAR(将所需的库解压到生成的 JAR 中)即可,如果项目有依赖,这个选项会把依赖的 JAR 内容也解压到最终的 JAR 中,形成一个大的“胖 JAR”。
    • Package required libraries into generated JAR:将依赖的 JAR 作为一个内嵌的包打包进去,这种方式比解压更整洁,但运行时可能会有性能开销。
  5. 完成导出

    • 点击 Finish,Eclipse 会开始构建 JAR 文件。
  6. 验证

    Eclipse如何将Java项目打包成可运行的jar文件?-图3
    (图片来源网络,侵删)
    • 打开命令行(CMD 或 PowerShell),进入到你保存 JAR 文件的目录。
    • 运行命令:java -jar my-app.jar
    • 如果程序成功启动,说明打包成功。

使用 Maven 插件(推荐,处理复杂依赖)

如果你的项目有复杂的外部依赖,强烈推荐使用 Maven 来管理项目依赖和打包,Maven 会自动处理所有依赖关系,生成标准的 JAR 文件。

前提条件:

  • 你的项目已经配置了 Maven(右键项目 -> Configure -> Convert to Maven Project)。
  • pom.xml 文件中已经正确声明了所有依赖。

步骤:

  1. 配置 pom.xml

    • 打开 pom.xml 文件。
    • 确保你的主类信息被正确配置在 <build> 标签下,这是为了让 Maven 知道哪个类是程序的入口。
    <project ...>
        ...
        <build>
            <plugins>
                <!-- 这是核心插件,用于构建可执行 JAR -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.4.1</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>
        ...
    </project>
    • maven-shade-plugin:这是一个非常强大的插件,它不仅可以打包,还能将所有依赖的 JAR 文件“合并”到一个最终的 JAR 中,并解决资源文件冲突,这种方式生成的 JAR 通常被称为“Uber JAR”或“Fat JAR”。
    • <mainClass>:务必替换成你自己的主类全限定名(com.yourcompany.yourproject.YourMainClass)。
  2. 在 Eclipse 中执行 Maven 构建

    • Package Explorer 中右键点击你的 pom.xml 文件。
    • 选择 Run As -> Maven install
  3. 查看结果

    • Maven 会开始执行构建过程,包括下载依赖、编译代码、测试(如果配置了)、打包等。
    • 构建成功后,在你的项目目录下的 target 文件夹中,你会找到一个以 -jar 结尾的文件,my-app-1.0-SNAPSHOT.jar,这就是你最终的可执行 JAR。
  4. 验证

    • 同样,在命令行中进入 target 目录,运行:
      java -jar my-app-1.0-SNAPSHOT.jar

使用 Gradle 插件(另一种现代构建工具)

如果你的项目使用 Gradle,过程与 Maven 类似,但配置文件是 build.gradle

前提条件:

  • 项目已配置 Gradle。
  • build.gradle 文件中已声明依赖。

步骤:

  1. 配置 build.gradle

    • 打开 build.gradle 文件。
    • 添加 application 插件,它提供了方便的构建可执行 JAR 的任务。
    plugins {
        id 'java'
        id 'application' // 添加这个插件
    }
    // 定义源代码和JAR的编码
    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'
    // 定义主类
    mainClassName = 'com.example.myapp.Main' // 替换为你的主类
    // 声明仓库
    repositories {
        mavenCentral()
    }
    // 声明依赖
    dependencies {
        implementation 'log4j:log4j:1.2.17' // 示例依赖
    }
    // Gradle 7.0 之后,推荐使用 jar 任务来配置
    jar {
        manifest {
            attributes 'Main-Class': mainClassName
        }
        // from { configurations.compile.collect { zipTree(it) } } // 旧版方式
        from { configurations.runtimeClasspath.collect { zipTree(it) } } // 新版方式,将所有依赖打包进JAR
    }
  2. 在 Eclipse 中执行 Gradle 构建

    • Package Explorer 中右键点击你的项目。
    • 选择 Run As -> Gradle Build
    • 在弹出的窗口中,对于 Gradle Task,输入 buildjar,然后点击 Run
  3. 查看结果

    • 构建成功后,在 build/libs 目录下会生成你的 JAR 文件。
  4. 验证

    • 在命令行进入 build/libs 目录,运行:
      java -jar your-project-name.jar

常见问题与解决方案 (FAQ)

Q1: 运行 JAR 时报错 no main manifest attribute, in my-app.jar

原因:JAR 文件的 META-INF/MANIFEST.MF 文件中没有正确指定 Main-Class 属性。 解决方案

  • 使用 Eclipse 导出时:确保在 Runnable JAR file 向导中正确选择了 Launch configuration
  • 使用 Maven/Gradle 时:确保在 pom.xmlbuild.gradle 中正确配置了 mainClassmainClassName,并重新构建项目。

Q2: 运行 JAR 时报错 ClassNotFoundException: com.example.SomeLibrary

原因:JAR 文件缺少

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