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

java 项目怎么做成jar

将Java项目打包成可执行的JAR文件是Java开发中的常见需求,无论是小型工具还是大型应用,打包后的JAR能简化部署流程,实现“一次构建,随处运行”的跨平台优势,本文将从准备工作、构建工具选择、具体操作步骤及常见问题四个方面,详细解析Java项目如何高效生成JAR包。

java 项目怎么做成jar

项目打包前的准备工作

在打包前,需确保项目结构规范且依赖清晰,这是生成可执行JAR的基础。

标准化项目结构

推荐采用Maven或Gradle的标准目录结构:

  • src/main/java:存放Java源代码文件;
  • src/main/resources:存放配置文件、资源文件(如application.properties、XML等);
  • pom.xml(Maven)或build.gradle(Gradle):项目依赖与构建配置文件。

若项目未使用构建工具,需手动管理依赖,并确保所有第三方库(如JAR包)统一存放在lib目录下,便于后续打包时引用。

确定主类(Main Class)

可执行JAR需指定入口类(包含public static void main(String[] args)方法的类),在打包时,需明确主类的全限定名(如com.example.MainApp),否则运行时会提示“找不到主类”。

主流构建工具:Maven与Gradle

实际开发中,Maven和Gradle是最常用的构建工具,能自动处理依赖、编译代码并生成JAR包,推荐优先使用。

使用Maven打包

Maven通过pom.xml配置打包参数,核心步骤如下:

(1)配置基础打包插件

pom.xml中,默认的maven-jar-plugin可生成基础JAR,但需手动配置主类:

<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.MainApp</mainClass>  
                    </manifest>  
                </archive>  
            </configuration>  
        </plugin>  
    </plugins>  
</build>  

(2)处理依赖(生成Fat JAR)

若需将所有依赖打入JAR(避免运行时依赖外部环境),可使用maven-assembly-pluginmaven-shade-plugin,以shade-plugin为例:

java 项目怎么做成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.MainApp</mainClass>  
                    </transformer>  
                </transformers>  
            </configuration>  
        </execution>  
    </executions>  
</plugin>  

执行mvn clean package后,会在target目录下生成包含所有依赖的Fat JAR(如your-app-1.0-SNAPSHOT.jar)。

使用Gradle打包

Gradle通过build.gradle配置,语法更简洁,适合灵活的项目需求。

(1)基础JAR配置

build.gradle中,Java插件默认会生成JAR,需指定主类:

jar {  
    manifest {  
        attributes 'Main-Class': 'com.example.MainApp'  
    }  
}  

(2)生成Fat JAR

使用shadow插件(需先添加插件:id 'com.github.johnrengelman.shadow' version '7.1.2'),配置如下:

shadowJar {  
    archiveBaseName = 'your-app'  
    archiveVersion = '1.0'  
    manifest {  
        attributes 'Main-Class': 'com.example.MainApp'  
    }  
}  

执行gradle shadowJar后,生成的Fat JAR位于build/libs目录(如your-app-1.0-all.jar)。

手动打包:适合小型项目

若项目未使用Maven/Gradle,可通过手动方式打包,步骤如下:

  1. 编译源码:进入src/main/java目录,执行javac -d ../classes com/example/*.java,编译后的.class文件存放在../classes目录。
  2. 收集依赖:将所有第三方JAR包复制到lib目录。
  3. 创建JAR:在项目根目录执行以下命令:
    jar -cvfe myapp.jar com.example.MainApp -C classes/ .  

    参数说明:-c创建JAR、-v显示过程、-f指定文件名、-e指定主类、-C切换目录(classes为编译后的目录)。

  4. 处理依赖:手动生成的JAR默认不包含依赖,运行时需通过-cp参数指定类路径:
    java -cp "myapp.jar:lib/*" com.example.MainApp  

    (Linux/macOS用分隔路径,Windows用)

    java 项目怎么做成jar

常见问题与解决方案

  1. “找不到主类”错误

    • 原因:Manifest中Main-Class配置错误(如类名未写全限定名,或路径包含)。
    • 解决:检查pom.xmlbuild.gradle中的主类配置,确保格式为包名.类名
  2. 依赖未找到(NoClassDefFoundError)

    • 原因:Fat JAR未包含依赖,或运行时类路径未正确指定。
    • 解决:使用shadeassembly插件生成包含所有依赖的Fat JAR,避免手动管理类路径。
  3. JAR体积过大

    • 原因:Fat JAR包含无用依赖(如测试库、示例代码)。
    • 解决:通过shade-pluginfilters排除无用文件,或使用模块化JPMS(Java 9+)优化依赖。

将Java项目打包成JAR的核心在于明确主类、正确处理依赖,并根据项目规模选择合适的打包方式:

  • Maven/Gradle:适合中大型项目,能自动管理依赖和构建流程,推荐使用shadeassembly插件生成Fat JAR;
  • 手动打包:适合小型项目,但需手动处理依赖和类路径,维护成本较高。

无论采用哪种方式,打包后务必通过java -jar your-app.jar测试可执行性,确保配置无误,规范的打包流程不仅能提升部署效率,也能避免因环境差异导致的问题。

赞(0)
未经允许不得转载:好主机测评网 » java 项目怎么做成jar