服务器测评网
我们一直在努力

Java项目怎么把代码打包成可运行的jar包?

在Java开发中,将项目打包成可执行的JAR(Java Archive)包是部署和分发应用程序的关键步骤,JAR包不仅便于管理和传输,还能包含项目所需的依赖资源,实现独立运行,本文将系统介绍Java导出JAR包的多种方法,涵盖IDE工具、Maven/Gradle构建工具以及命令行操作,帮助开发者根据项目需求选择合适的打包方式。

Java项目怎么把代码打包成可运行的jar包?

使用IDE工具导出JAR包

对于习惯图形化界面的开发者,集成开发环境(IDE)提供了便捷的JAR包导出功能,以IntelliJ IDEA和Eclipse为例,操作流程如下:

IntelliJ IDEA操作步骤

  • 配置项目结构:打开项目后,进入File > Project Structure,选择Artifacts,点击号新建JAR > From modules with dependencies
  • 模块与主类设置:在弹出的窗口中,选择主模块(通常是包含main方法的模块),勾选Main Class并指定程序入口类,若需包含依赖库,勾选Extract to the JAR(将依赖库解压到JAR包中)或Copy to the JAR(将依赖库作为独立文件打包)。
  • 资源文件处理:若项目包含配置文件(如application.properties)、XML或图片等非Java资源,需确保在Build Artifacts时已正确包含,可通过Custom manifest指定Class-PathMain-Class属性。
  • 构建与导出:完成配置后,点击OK返回,选择Build > Build Artifacts,选中已配置的JAR包执行构建,生成的JAR文件将默认存放在项目目录/out/artifacts/下。

Eclipse操作步骤

  • 导出向导:右键点击项目,选择Export > Runnable JAR file,进入JAR导出向导。
  • 配置运行环境:在Launch configuration中选择已配置的运行环境(通常包含主类信息),在Export destination中设置JAR包保存路径。
  • 依赖处理选项:在Library handling中,可选择Package required libraries into generated JAR(将依赖打包进JAR)或Copy required libraries into a sub-folder(依赖复制到子目录),前者适合独立部署,后者便于调试依赖冲突。
  • 完成导出:点击Finish,Eclipse将自动构建JAR包,并在控制台输出构建日志。

使用Maven构建工具导出JAR包

Maven作为Java项目主流构建工具,通过maven-jar-pluginmaven-assembly-plugin可实现灵活的JAR包打包,以下是核心配置步骤:

基础JAR包打包

  • 插件配置:在pom.xml中添加maven-jar-plugin,指定Main-Class和项目构建输出目录:
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.example.MainApplication</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • 执行打包:在项目根目录执行命令mvn clean package,生成的JAR包将位于target/目录下,默认名称为项目名-版本号.jar

可执行JAR包(包含依赖)

若需将依赖库一同打包,可使用maven-assembly-pluginmaven-shade-plugin

  • Assembly插件配置
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
                <manifest>
                    <mainClass>com.example.MainApplication</mainClass>
                </manifest>
            </archive>
        </configuration>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
  • 执行打包:运行mvn clean package assembly:single,生成的JAR包后缀为-jar-with-dependencies.jar,可直接通过java -jar命令执行。

避免依赖冲突

使用maven-shade-plugin可解决依赖冲突,并生成“胖JAR”(Fat JAR):

<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.MainApplication</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

使用Gradle构建工具导出JAR包

Gradle以简洁的配置和高效的构建著称,通过jar任务和插件可实现JAR包打包:

Java项目怎么把代码打包成可运行的jar包?

基础JAR包打包

  • 配置主类:在build.gradle中添加以下配置:
    jar {
        manifest {
            attributes 'Main-Class': 'com.example.MainApplication'
        }
    }
  • 执行打包:运行gradle build,生成的JAR包位于build/libs/目录下。

可执行JAR包(包含依赖)

使用shadow插件(需先添加插件依赖):

plugins {
    id 'com.github.johnrengelman.shadow' version '7.1.2'
}
shadowJar {
    archiveClassifier.set('all')
    manifest {
        attributes 'Main-Class': 'com.example.MainApplication'
    }
}

执行gradle shadowJar后,生成的-all.jar即为包含依赖的可执行JAR包。

自定义JAR包结构

若需排除特定依赖或自定义资源文件,可通过excludemerge方法实现:

shadowJar {
    exclude 'org.slf4j:slf4j-simple'
    mergeServiceFiles()
}

命令行手动打包JAR包

对于轻量级项目或无构建工具的场景,可通过JDK自带的jar命令手动打包:

基础命令

jar -cvf myapp.jar -C target/classes .
  • -c:创建新JAR包
  • -v:显示详细输出
  • -f:指定JAR包文件名
  • -C target/classes:切换到目标目录

指定主类

需创建META-INF/MANIFEST.MF如下:

Java项目怎么把代码打包成可运行的jar包?

Manifest-Version: 1.0
Main-Class: com.example.MainApplication

打包命令:

jar -cvfm myapp.jar META-INF/MANIFEST.MF -C target/classes .

添加依赖库

将依赖JAR包解压后与项目类文件一同打包,或通过Class-Path属性指定依赖路径:

Class-Path: lib/dependency1.jar lib/dependency2.jar

JAR包常见问题与解决方案

  1. 依赖缺失:若JAR包运行时报ClassNotFoundException,检查是否正确包含依赖库,或通过java -jar myapp.jar查看依赖路径。
  2. 主类未找到:确保MANIFEST.MF中的Main-Class路径正确(需包含包名,如com.example.Main)。
  3. 资源文件读取失败:使用ClassLoader.getResource()Class.getResouceAsStream()读取资源,避免使用绝对路径。
  4. Windows系统下运行失败:检查JAR包是否为可执行文件,或在命令行中显式指定java -jar

通过以上方法,开发者可根据项目规模和复杂度选择合适的JAR包导出方式,无论是IDE的图形化操作,还是构建工具的自动化配置,亦或是命令行的手动控制,核心目标均是将Java应用程序及其依赖打包为独立、可执行的单元,实现便捷的部署与分发,掌握多种打包技巧,能有效提升开发效率,解决不同场景下的打包需求。

赞(0)
未经允许不得转载:好主机测评网 » Java项目怎么把代码打包成可运行的jar包?