Java怎么打包成jar文件

使用Maven或Gradle构建工具,在项目根目录执行mvn packagegradle build命令自动打包,若用IDE,右键项目选择Export或Build Artifacts生成可执行JAR,需指定主类入口。

核心概念

  1. JAR文件本质
    Java ARchive(JAR)是压缩格式的Java类文件、资源文件和元数据(如MANIFEST.MF)的集合,类似ZIP文件。
  2. 可执行JAR要求
    MANIFEST.MF文件中必须指定主类:Main-Class: com.example.Main

打包方法详解

方法1:使用IDE(推荐初学者)

IntelliJ IDEA步骤:

Java怎么打包成jar文件

  1. 打开项目 → 顶部菜单选 File > Project Structure
  2. 左侧 Artifacts → 点 → JAR > From modules with dependencies
  3. 选择主类(Main Class)→ 设置输出目录(Output directory)
  4. 点击 Apply → 返回编辑器,顶部菜单 Build > Build Artifacts
  5. 选择 Build → 生成的JAR在项目目录的out/artifacts/

Eclipse步骤:

  1. 右键项目 → Export → 搜索 Runnable JAR file
  2. 选择启动配置(Launch configuration)和主类
  3. 设置输出路径 → 选择依赖处理方式:
    • Extract required libraries:解压依赖到JAR内(适合简单项目)
    • Package required libraries:依赖JAR放入同级libs文件夹
  4. 点击 Finish

方法2:使用Maven(自动化构建)

  1. 配置pom.xml
    添加maven-jar-plugin和主类声明:

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.3.0</version>
          <configuration>
            <archive>
              <manifest>
                <mainClass>com.example.Main</mainClass> <!-- 替换为你的主类 -->
              </manifest>
            </archive>
          </configuration>
        </plugin>
      </plugins>
    </build>
  2. 生成可执行JAR
    终端执行:

    mvn clean package
  3. 输出位置
    生成的JAR在target/目录,命名为项目名-版本.jar

处理依赖(生成含依赖的Fat JAR)
使用maven-assembly-plugin

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.6.0</version>
  <configuration>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <archive>
      <manifest>
        <mainClass>com.example.Main</mainClass>
      </manifest>
    </archive>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

执行mvn package后,target/目录生成项目名-版本-jar-with-dependencies.jar

Java怎么打包成jar文件


方法3:使用Gradle

  1. 配置build.gradle
    启用application插件并指定主类:

    plugins {
      id 'application'
    }
    application {
      mainClass = 'com.example.Main' // 替换为你的主类
    }
  2. 生成标准JAR
    执行:

    gradle jar

    JAR输出在build/libs/

生成Fat JAR
添加shadow插件(推荐):

plugins {
  id 'com.github.johnrengelman.shadow' version '8.1.1'
}

执行:

Java怎么打包成jar文件

gradle shadowJar

输出文件为build/libs/项目名-all.jar


方法4:手动打包(理解原理)

  1. 编译所有Java文件
    javac -d ./out src/**/*.java
  2. 创建MANIFEST.MF
    out/目录新建MANIFEST.MF

    Manifest-Version: 1.0
    Main-Class: com.example.Main  # 替换主类
    Class-Path: libs/dependency1.jar libs/dependency2.jar  # 若有依赖
  3. 打包JAR
    jar cvfm app.jar ./out/MANIFEST.MF -C ./out .
    • c创建新JAR
    • v输出详细信息
    • f指定文件名
    • m包含清单文件

运行与验证

  • 启动命令
    java -jar your-app.jar
  • 依赖处理
    若依赖在外部libs/目录,需保持MANIFEST.MFClass-Path路径一致。

常见问题解决

  1. “no main manifest attribute”
    原因:未指定主类。
    修复:检查MANIFEST.MFMain-Class路径是否正确,或重新配置构建工具。
  2. ClassNotFoundException
    原因:依赖未包含。
    修复:

    • 使用Fat JAR打包(推荐)
    • 或将依赖JAR放入Class-Path指定目录
  3. 编码问题
    编译时指定编码:

    javac -encoding UTF-8 ...

最佳实践

  • 自动化构建:优先用Maven/Gradle,减少手动错误
  • 版本管理:在JAR名中包含版本号(如app-1.0.0.jar
  • 依赖隔离:生产环境推荐使用Docker容器化部署
  • 安全扫描:使用OWASP Dependency-Check扫描依赖漏洞

引用说明基于Oracle官方JAR文档、Apache Maven指南、Gradle手册及IDE官方文档综合整理,确保方法经过实践验证,具体命令参数可参考:

  • Oracle JAR工具:https://docs.oracle.com/javase/tutorial/deployment/jar/
  • Maven JAR插件:https://maven.apache.org/plugins/maven-jar-plugin/
  • Gradle Shadow插件:https://github.com/johnrengelman/shadow

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/41323.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月28日 22:47
下一篇 2025年6月12日 12:03

相关推荐

  • Java如何快速调用百度语音?

    使用百度语音识别Java SDK需先注册百度云账号,创建应用获取API Key和Secret Key,导入Java SDK后,编写代码调用语音识别接口,传入音频文件或流及配置参数(如音频格式、采样率),即可获取识别文本结果。

    2025年6月13日
    100
  • Windows怎么设置JAVA_HOME环境变量?

    设置JAVA_HOME需先找到JDK安装路径,在系统环境变量中新建变量JAVA_HOME,值为该路径;然后编辑Path变量,添加%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(Linux/macOS),最后打开新终端验证java -version。

    2025年6月26日
    000
  • Java格式化如何实现?

    Java格式化主要通过String.format()、System.out.printf()或Formatter类实现,支持数字、日期和字符串的格式化输出,常用占位符如%d(整数)、%.2f(两位小数)和%s(字符串),结合SimpleDateFormat可处理日期时间格式。

    2025年6月22日
    100
  • Java登出功能如何实现

    Java退出登录通常需销毁用户会话(session.invalidate()),清除相关用户数据如Cookie或Token,最后重定向到登录页面,如response.sendRedirect(“login.jsp”)。

    2025年6月9日
    100
  • Java分页GUI如何快速实现?

    使用Java Swing实现GUI分页,通过JTable展示数据,JButton控制翻页(上一页/下一页),结合分页算法计算当前页数据范围,动态更新表格内容并显示页码信息。

    2025年6月15日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN