纯Kotlin项目能否使用Java 9模块系统(Jigsaw)?
Kotlin中能否使用Java 9 Jigsaw模块系统?
完全可以。Kotlin从1.2版本起就正式支持Java 9的Jigsaw模块系统,纯Kotlin项目也能借助它实现跨模块的功能隐藏,减少对internal修饰符的依赖。
以下是关键的使用要点和注意事项:
基础配置
- 为每个Kotlin模块创建
module-info.java文件(目前Kotlin不支持用.kt编写模块声明),示例如下:module com.example.mykotlinmodule { // 对外暴露的公开API包 exports com.example.public.api; // 依赖Kotlin标准库模块 requires kotlin.stdlib; // 如果需要依赖其他模块,添加对应的requires声明 requires com.example.anothermodule; } - 配置构建工具(Gradle/Maven):设置Java版本为9及以上,并启用模块系统。比如在Gradle中:
java { sourceCompatibility = JavaVersion.VERSION_11 // 或更高版本 targetCompatibility = JavaVersion.VERSION_11 }
- 为每个Kotlin模块创建
与Kotlin可见性的配合
- Jigsaw的模块导出规则可以替代部分
internal的使用场景:只要不把内部功能所在的包通过exports声明导出,其他模块就无法访问这些包中的任何成员,不管它是public还是internal。 - 模块内部的代码依然可以使用
internal来控制模块内的可见性,这和Jigsaw的模块控制是互补关系,互不冲突。private/fileprivate这类更细粒度的可见性修饰符也能正常使用。
- Jigsaw的模块导出规则可以替代部分
需要注意的细节
- 必须使用
module-info.java,不能用Kotlin编写模块声明文件,这是当前官方的限制。 - 确保依赖的库(包括Kotlin标准库)支持模块化:Kotlin标准库从1.2版本开始已经提供了模块化的jar包,无需额外配置。
- 构建时要使用模块路径(module path)而非传统的类路径(class path),主流构建工具会在配置好Java版本后自动处理这一点。
- 必须使用
内容的提问来源于stack exchange,提问作者Andriy Kryvtsun
相关产品推荐
相关产品推荐

