温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java Module 怎么打包

发布时间:2026-08-31 15:33:43 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

Java Module(即 Java 9 引入的 JPMS,Java Platform Module System)打包,通常有几种常见方式,取决于你是只打包模块打包可运行程序,还是生成可分发镜像。下面按常见场景系统说明 ✅


一、最基础:把 Module 打包成 JAR

1️⃣ 项目结构(标准模块结构)

demo.module
│
├── module-info.java
└── com
    └── example
        └── Main.java
// module-info.java
module demo.module {
    exports com.example;
}
package com.example;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello Module");
    }
}

2️⃣ 编译模块

javac -d out \
  src/demo.module/module-info.java \
  src/demo.module/com/example/Main.java

3️⃣ 打包成 modular JAR

jar --create \
    --file demo.module.jar \
    -C out .

✅ 生成的 demo.module.jar 是一个 modular JAR


二、可运行 Module JAR(带 main-class)

1️⃣ 指定 Main-Class

jar --create \
    --file demo.module.jar \
    --main-class com.example.Main \
    -C out .

运行:

java --module-path demo.module.jar --module demo.module

或者直接(如果是可执行 JAR):

java -jar demo.module.jar

⚠️ 注意

  • -jar 不会使用 module path
  • 模块系统只在 --module-path 下生效

三、使用 Maven 打包 Module(推荐)

1️⃣ Maven 项目结构

src
└── main
    ├── java
    │   ├── module-info.java
    │   └── com/example/Main.java
    └── resources

2️⃣ pom.xml(关键配置)

<properties>
    <maven.compiler.release>17</maven.compiler.release>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
        </plugin>

        <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>

打包:

mvn package

生成:

target/demo-module-1.0.jar

四、多模块 Module 打包(最常见)

结构示例

project
├── app
│   ├── module-info.java
│   └── com/example/app/Main.java
├── lib
│   ├── module-info.java
│   └── com/example/lib/Util.java

编译顺序

javac -d out/lib \
  lib/module-info.java lib/com/example/lib/Util.java

javac --module-path out/lib -d out/app \
  app/module-info.java app/com/example/app/Main.java

打包

jar --create --file lib.jar -C out/lib .
jar --create --file app.jar --main-class com.example.app.Main -C out/app .

五、使用 jlink 打包成“绿色发行版”(强烈推荐)

这是 Java Module 的杀手级用法

jlink \
  --module-path $JAVA_HOME/jmods:out \
  --add-modules demo.module \
  --output myapp-runtime \
  --launcher myapp=demo.module/com.example.Main

运行:

myapp-runtime/bin/myapp

✅ 优点:

  • 不需要 JDK
  • 体积小
  • 可独立分发

六、总结对比

方式 适用场景
jar 普通模块 JAR
maven-jar-plugin 工程化构建
jlink 最终交付程序
--module-path 模块依赖管理

七、常见坑 ⚠️

  • module-info.java 不在 src/main/java 根目录
  • ❌ 混用 classpath 和 module-path
  • ❌ 可执行 JAR + module 混用
  • requires 的模块不在 module-path 上

如果你愿意,我可以:

  • ✅ 给你一个 完整 demo 项目
  • ✅ 帮你把 老项目迁移到 Java Module
  • ✅ 讲清楚 module-path vs classpath

你现在用的是 Maven / Gradle / 纯 javac

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI