从Java 8迁移至Java 11时Hibernate Validator模块缺失的Maven构建问题
解决Java 11 JPMS环境下Hibernate Validator模块找不到的问题
你在从Java 8迁移到Java 11的JPMS模块系统时,遇到了注解处理器阶段找不到org.hibernate.validator模块的问题。这个问题主要出在依赖缺失和JPMS下注解处理器的路径配置两个方面,下面是具体的解决步骤:
1. 补充Hibernate Validator核心依赖
你的pom.xml里只引入了hibernate-jpamodelgen(JPA元模型生成器),但module-info.java中声明的requires org.hibernate.validator;对应的是Hibernate Validator的核心模块,这个模块来自hibernate-validator依赖。你需要在项目的<dependencies>节点下添加这个依赖:
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>5.4.10.Final</version> <scope>compile</scope> </dependency>
注意版本要和hibernate-jpamodelgen保持一致(都是5.4.10.Final),避免版本兼容问题。
2. 配置Maven编译器插件支持JPMS
Java 11的模块系统需要Maven编译器插件明确启用模块路径处理。确保你的maven-compiler-plugin配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <release>11</release> <modulepath>true</modulepath> </configuration> </plugin>
<modulepath>true</modulepath>会告诉Maven在编译时使用模块路径而非传统的类路径,这是JPMS环境下必须的配置。
3. 调整maven-processor-plugin的模块路径配置
注解处理器在JPMS环境下也需要正确识别模块路径。修改你的maven-processor-plugin配置,添加<modulepath>true</modulepath>:
<plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> <version>3.3.3</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>process</goal> </goals> <configuration> <processors> <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> </processors> <!-- 启用模块路径支持 --> <modulepath>true</modulepath> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <version>5.4.10.Final</version> </dependency> </dependencies> </plugin>
为什么这样能解决问题?
在JPMS中,模块依赖是强声明的:
- 你在
module-info.java里声明了requires org.hibernate.validator,但如果项目依赖中没有引入对应的JAR包,编译阶段(包括注解处理阶段)就找不到这个模块。 maven-processor-plugin默认可能还是用类路径模式处理依赖,添加<modulepath>true</modulepath>后,它会遵循JPMS的模块路径规则来查找依赖模块。
完成以上配置后,重新执行mvn clean compile,应该就能解决模块找不到的错误了。
内容的提问来源于stack exchange,提问作者jon5477
相关产品推荐
相关产品推荐

