JPMS是否支持模块版本?版本标识及依赖配置疑问咨询
关于JPMS模块版本的疑问解答
嘿,这个问题问到点子上了!我来一步步帮你理清:
1. java --list-modules输出里的@9是什么?
没错,@后面的数字就是模块的版本号!你看到的这些都是JDK自带的系统模块,它们的版本和你使用的JDK版本完全一致——这里的9就代表你用的是JDK 9版本。JPMS从JDK 9开始引入,系统模块的版本自然和JDK版本绑定。
2. JPMS到底支持模块版本吗?
当然支持!不过有个容易混淆的点:JPMS允许模块携带版本元数据,但JVM在运行时并不会自动处理版本冲突或依赖版本匹配。版本信息更多是作为元数据存在,实际的版本管理、依赖解析工作,通常是交给Maven、Gradle这类构建工具来完成的。
3. 能不能在模块A的module-info里指定依赖特定版本的模块B?
完全可以!你可以在requires语句后面加上version子句来声明依赖的版本,语法示例如下:
module moduleA { // 不指定版本的依赖 requires moduleB; // 指定特定版本的依赖 requires moduleC version "1.2.3"; }
不过要注意:这个版本声明只是模块描述符里的元数据,JVM运行时并不会据此去寻找对应版本的模块。真正会用到这个版本信息的是构建工具——它们会根据你声明的版本,从仓库里拉取正确的依赖包,然后构建出符合要求的模块路径。
内容的提问来源于stack exchange,提问作者user5182503




