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

迁移至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的内容,以此确认模块名。

  • 额外注意事项:

    1. 确保你的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>
      
    2. 长远来看,建议迁移到Jakarta Validation API(Java EE已迁移至Jakarta生态),比如依赖jakarta.validation:jakarta.validation-api:3.0.2,这个版本有正式模块定义,模块名是jakarta.validation,对应的requires语句是requires jakarta.validation;,更适配Java 17及以后的版本。

内容的提问来源于stack exchange,提问作者manuelvigarcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:54:53