当前位置:首页 > 后端开发 > 正文

Java打包JAR文件详细步骤

使用javac编译Java文件,然后通过jar命令打包成JAR文件,命令示例: jar cvf 程序名.jar 主类名.class,或利用IDE(如Eclipse/IntelliJ)直接导出可执行JAR,需指定主类入口。

将Java程序打包成JAR文件是分发和运行Java应用的标准方式,以下是详细的操作指南,涵盖命令行和主流IDE两种方法,确保符合最佳实践:

Java打包JAR文件详细步骤  第1张

核心概念

  1. JAR文件本质
    JAR(Java Archive)是基于ZIP格式的压缩包,包含.class文件、资源文件及元数据(如MANIFEST.MF),可指定主类实现双击运行。
  2. 清单文件(MANIFEST.MF)作用
    位于META-INF/目录下,定义JAR属性(如主类路径、依赖库路径),格式要求:

    Main-Class: com.example.MainClass   // 末尾必须空一行
    Class-Path: lib/dependency.jar      // 每行不超过72字符

命令行打包(JDK原生方式)

步骤1:编译Java代码

javac -d ./build src/*.java   # 将源码编译到build目录
  • 确保JDK已安装(检查命令:javac -version

步骤2:创建清单文件

  1. build/目录新建MANIFEST.MF
    Main-Class: com.example.MainClass
    # 注意:末尾保留一个空行

步骤3:打包JAR

cd build
jar cfm app.jar MANIFEST.MF com/*   # 关键参数:
                                    # c-创建JAR, f-指定文件名, m-引用清单文件

步骤4:运行验证

java -jar app.jar   # 测试执行

使用IDE打包(更高效)

▶ Eclipse操作流程

  1. 右击项目 → Export → 搜索”Runnable JAR”
  2. 配置选项:
    • Launch configuration:选择包含main方法的类
    • Export destination:输出路径(如app.jar
    • Library handling:选Package required libraries(自动包含依赖)

▶ IntelliJ IDEA操作流程

  1. File → Project Structure → Artifacts → + → JAR → From modules…
  2. 选择主类(Main Class)
  3. 勾选Build on make → 点击Apply
  4. Build → Build Artifacts → 生成JAR文件

包含外部依赖的打包方案

方案1:生成FatJAR(推荐)

  • 使用Maven:在pom.xml中添加插件:
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <descriptorRefs>jar-with-dependencies</descriptorRefs>
            <archive>
              <manifest>
                <mainClass>com.example.Main</mainClass>
              </manifest>
            </archive>
          </configuration>
        </plugin>
      </plugins>
    </build>

    执行:mvn clean compile assembly:single

方案2:分离依赖库

  1. 将依赖JAR放入lib/目录
  2. 清单文件中声明路径:
    Class-Path: lib/gson-2.8.9.jar lib/commons-io-2.11.jar
  3. 最终目录结构:
    app.jar
    lib/
      ├─ gson-2.8.9.jar
      └─ commons-io-2.11.jar

常见问题解决

  1. “no main manifest attribute”
    → 清单文件未指定Main-Class或格式错误(需末尾空行)
  2. ClassNotFoundException
    → 检查Class-Path路径是否正确,依赖JAR是否缺失
  3. 中文乱码问题
    → 编译时指定编码:javac -encoding UTF-8 ...
  4. 模块化项目(JDK9+)
    → 添加module-info.java或使用jlink定制运行时

安全与优化建议

  • 代码签名:防止改动
    jarsigner -keystore mykey.jks app.jar alias_name
  • 压缩资源:减小体积
    jar cvfm app.jar MANIFEST.MF -C ./build .   # 自动压缩

引用说明参考Oracle官方文档《JAR File Specification》及Apache Maven最佳实践,操作均通过JDK 17环境验证,IDE操作步骤基于Eclipse 2025-03与IntelliJ IDEA 2025.1版本,命令行工具为各平台通用标准,Windows/Linux/macOS均可执行。

0