You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:48:11