关于Java Module Import Declarations自导入的正确性及编译问题问询
关于JEP 511模块自导入的合规性与编译问题解答
1. 模块自导入是否合规?
JEP 511引入的import module语法,Java语言规范(JLS)并未明确禁止导入自身模块,所以编译通过说明语法上是允许的,但这种操作完全没有实际意义。当前模块内的所有公开类型本来就可以直接访问,无需通过模块导入来获取访问权限,反而会增加代码冗余,不建议这么写。
2. 是否会导致Maven引入旧JAR?
模块自导入本身不会触发Maven引入旧版本JAR的问题。Maven的依赖解析逻辑完全基于pom.xml中的依赖声明,和代码里的import module语句无关。只要你的依赖配置没有版本冲突,就不会出现旧JAR被意外引入的情况。
3. 不同模块编译结果差异的原因
出现一个模块能编译、另一个不能的情况,通常是以下某类差异导致:
- 模块描述符配置差异:
com.tugalsan.api.file的module-info.java可能存在问题,比如未正确声明公开包、模块结构不符合JPMS规范,或者存在类路径与模块路径混淆的情况。 - 编译环境不一致:两个模块可能使用了不同的JDK版本(JEP 511是Java 17特性,需确保编译环境都是Java 17及以上),或者
maven-compiler-plugin的配置不同(比如release参数设置不一致)。 - 语句位置错误:
import module必须放在所有普通import语句之前,且位于package声明之后(如果有包声明的话)。如果com.tugalsan.api.file中的该语句位置不符合要求,就会编译失败。
内容的提问来源于stack exchange,提问作者Tugalsan Karabacak
相关产品推荐
相关产品推荐

