在 Java 里“模块(Module)”通常指 Java 9 引入的 JPMS(Java Platform Module System),也可能是 Maven / Gradle 多模块项目。下面分情况说明“怎样导出”。
module-info.java)在 module-info.java 中用 exports:
module com.example.mylib {
exports com.example.mylib.api;
}
含义:
com.example.mylib.api 包可以被其他模块访问module com.example.mylib {
exports com.example.mylib.spi to com.example.app;
}
module com.example.mylib {
exports com.example.mylib.api;
provides com.example.spi.Service with com.example.mylib.impl.ServiceImpl;
}
javac -d out \
src/com.example.mylib/module-info.java \
src/com.example.mylib/com/example/mylib/*.java
jar --create \
--file mylib.jar \
--module-version 1.0 \
-C out .
✅ 生成的 mylib.jar 就是可导出的 Java 模块
如果你是 Maven 多模块项目:
<modules>
<module>common</module>
<module>service</module>
</modules>
<artifactId>common</artifactId>
<version>1.0.0</version>
其他模块:
<dependency>
<groupId>com.example</groupId>
<artifactId>common</artifactId>
<version>1.0.0</version>
</dependency>
打包:
mvn clean install
✅ install 后模块就“导出”到本地仓库了
// settings.gradle
include 'common', 'service'
// service/build.gradle
dependencies {
implementation project(':common')
}
| 说法 | 正确理解 |
|---|---|
| “导出 module” | 实际是 导出 package |
| jar 就是模块 | 只有含 module-info.class 才是 JPMS 模块 |
| private 包能访问 | ❌ 不导出就不能访问 |
我可以直接给你完整示例工程结构。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。