迁移至Java 17强制模块化系统,如何获取javax.validation模块?
解决Java 17模块系统中javax.validation不可见的问题
首先明确:你用的
javax.validation:validation-api:2.0.1.Final是Java EE时代的依赖,它本身没有内置module-info.java,在JPMS(Java平台模块系统)下会被当作「自动模块」处理。自动模块的名称是从JAR文件名推导的——这个JAR的文件名是validation-api-2.0.1.Final.jar,所以对应的自动模块名是validation.api。你需要在module-info.java里添加:
requires validation.api;验证模块名的方法:可以直接在本地Maven仓库的该JAR文件上执行命令确认:
jar --file=~/.m2/repository/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar --describe-module执行后会输出类似
automatic module name: validation.api的内容,以此确认模块名。额外注意事项:
- 确保你的maven-compiler-plugin版本支持JPMS,至少要3.8.0以上,推荐用3.11.0+,配置示例:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> <release>17</release> </configuration> </plugin> - 长远来看,建议迁移到Jakarta Validation API(Java EE已迁移至Jakarta生态),比如依赖
jakarta.validation:jakarta.validation-api:3.0.2,这个版本有正式模块定义,模块名是jakarta.validation,对应的requires语句是requires jakarta.validation;,更适配Java 17及以后的版本。
- 确保你的maven-compiler-plugin版本支持JPMS,至少要3.8.0以上,推荐用3.11.0+,配置示例:
内容的提问来源于stack exchange,提问作者manuelvigarcia
相关产品推荐
相关产品推荐

