【问题标题】:Cannot resolve symbol 'jakarta'无法解析符号“雅加达”
【发布时间】:2022-07-22 21:09:08
【问题描述】:

我在我的 maven 项目中使用了最新版本的 hibernate 验证器包。我的 pom 文件包含这个

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>7.0.4.Final</version>
        <scope>compile</scope>
    </dependency>

当我使用版本 6 时,一切正常,但使用版本 7,以下方法会引发错误。

private void addValidationError(ConstraintViolation<?> cv) {
    this.addValidationError(
            cv.getRootBeanClass().getSimpleName(),
            ((PathImpl) cv.getPropertyPath()).getLeafNode().asString(),
            cv.getInvalidValue(),
            cv.getMessage());
}

错误在于对 PathImpl 的强制转换。将鼠标悬停在错误上,我收到此消息:

Inconvertible types; cannot cast 'javax.validation.Path' to 'org.hibernate.validator.internal.engine.path.PathImpl'

当我导航到 PathImpl 类时,我可以看到该文件(在已自动下载的 jar 中,当然不是由我控制的)无法编译,因为其中的这两行错误

import jakarta.validation.ElementKind;
import jakarta.validation.Path;

错误是

Cannot resolve symbol 'jakarta'

我是不是做错了什么?

【问题讨论】:

    标签: java hibernate maven


    【解决方案1】:

    您正在尝试将 Java EE 与 Jakarta EE 混合使用。

    在最新版本中,命名空间已从 javax 更改为 jakarta。

    确保您的依赖项都是最新的并使用相同的版本。

    【讨论】:

    • 我的 pom 文件中唯一提到 javax 的就是这个。我会尝试改变这个:javax.validationvalidation-api
    • 我把这个改成了这个,没有运气 jakarta.validationjakarta.validation-api3.0.2版本> 依赖>
    【解决方案2】:

    这是因为在较新版本的 Jakarta EE 规范中,命名空间从 javax 更改为 jakarta。您应该使用旧版本的 hibernate-validator(如您所说)或仅更新 Jakarta 平台 依赖项以实现兼容性:

    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-api</artifactId>
        <version>8.0.0</version>
        <scope>provided</scope>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多