首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven使用错误版本的javax.validation

Maven使用错误版本的javax.validation
EN

Stack Overflow用户
提问于 2017-12-23 04:56:05
回答 5查看 20.5K关注 0票数 6

我有一个使用hibernate作为jpa提供者的动态web项目。直到上周,我还可以使用hibernate在数据库中执行插入、更新、查询和删除操作。最近,我开始从事验证工作,并引入了许多不同的maven依赖项。在这样做的过程中,不知何故,我的项目最终使用了一个旧的、不推荐使用的javax.validation jar版本,它抛出了一个没有这样的方法异常。我已经在下面包含了堆栈跟踪的相关行:

代码语言:javascript
复制
Caused by: java.lang.NoSuchMethodError: javax.validation.BootstrapConfiguration.getClockProviderClassName()Ljava/lang/String;
at org.hibernate.validator.internal.xml.ValidationBootstrapParameters.<init>(ValidationBootstrapParameters.java:63)

但是,在我的pom.xml中,我有以下依赖项(通过javap和eclipse检查时,它在指定的类中有getClockProviderClassName()方法):

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.0.Final</version>
    </dependency>   

我在我的pom中的多个依赖项中放入了以下排除标记,以确保它不会从其他来源拉出这个jar:

代码语言:javascript
复制
            <exclusion>
                <artifactId>validation-api</artifactId>
                <groupId>javax.validation</groupId>
            </exclusion>

我还简化了构建路径,使其包含三个元素:一个仅包含我的log4j配置的属性文件夹、JRE系统库(版本1.8)和maven依赖项。有没有办法知道被弃用的javax.validation jar是从哪里来的?我可以强制程序使用maven引入的2.0.0版本吗?谢谢你的帮助。

其他信息:

full stack trace

persistence.xml source

working datasource properties

Java Build Path

Line where root exception occurs (in my code)

look inside the included jar to see it contains the method

using javap to examine artifact in maven (m2) directory

dependency overview from maven

来自pom.xml的依赖项

代码语言:javascript
复制
<dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.0.2.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.2.Final</version>
        <exclusions>
            <exclusion>
                <artifactId>jboss-logging</artifactId>
                <groupId>org.jboss.logging</groupId>
            </exclusion>
            <exclusion>
                <artifactId>validation-api</artifactId>
                <groupId>javax.validation</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.10.0</version>
    </dependency>
    <!-- https://stackoverflow.com/questions/20859379/cannot-import-javax-ejb-packages -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>3.3.0.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.ejb/ejb-api -->
    <dependency>
        <groupId>javax.ejb</groupId>
        <artifactId>ejb-api</artifactId>
        <version>3.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>3.0-alpha-1</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.3</version>
    </dependency>
    <!-- ********************************************************************************************************** -->
    <!-- THE FOLLOWING ARE SEPERATE FROM HIBERNATE THAT IS USED TO CONNECT 
        TO DB, THESE ARE FOR USE WITH VALIDATION -->
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.7.Final</version>
        <exclusions>
            <exclusion>
                <artifactId>validation-api</artifactId>
                <groupId>javax.validation</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator-annotation-processor -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>6.0.7.Final</version>
                    <exclusions>
            <exclusion>
                <artifactId>validation-api</artifactId>
                <groupId>javax.validation</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-cdi</artifactId>
        <version>6.0.7.Final</version>
                    <exclusions>
            <exclusion>
                <artifactId>validation-api</artifactId>
                <groupId>javax.validation</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.0.Final</version>
    </dependency>       
    <!-- ********************************************************************************************************** -->
    <!-- API and reference implementation of expression language {a.b} in html 
        code -->
    <!-- https://mvnrepository.com/artifact/javax.el/javax.el-api -->
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.el -->
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.el</artifactId>
        <version>2.2.6</version>
    </dependency>
</dependencies>
EN

回答 5

Stack Overflow用户

发布于 2017-12-25 13:08:13

尝试将此依赖项添加到您的pom.xml

代码语言:javascript
复制
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>
票数 11
EN

Stack Overflow用户

发布于 2018-04-06 20:40:40

这种情况是由javaee-web-api 7.0作为依赖项引起的:

代码语言:javascript
复制
<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-web-api</artifactId>
  <version>7.0</version>
  <scope>provided</scope>
</dependency>

servlet或应用程序容器在运行时提供的这种依赖关系为您提供了一个较旧的javax.validation应用编程接口。

您有两件事要尝试:

javaee-web-api 的版本更改为8.0

如果您正在将web应用程序部署到支持Java EE 8.0的servlet或应用程序容器中,则这是最快的解决方案(例如:它似乎可以在Tomcat 8.5.X中工作,但阅读文档时,只有Tomcat 9提供了对Java EE 8的支持)。

javaee-web-api hibernate-validator**,保留为7.0并降级validation-api dependencies: ** 7.0

代码语言:javascript
复制
<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
  <version>1.1.0.Final</version>
</dependency>

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>5.4.2.Final</version>
</dependency>

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator-annotation-processor</artifactId>
  <version>5.4.2.Final</version>
</dependency>    

您还必须将一些导入,如@Email@NotEmptyjavax.validation包更改为org.hibernate.validator.constraints (这些注释在6.0.X hibernate-validator版本中已被弃用,因为它们包含在javax.validation应用程序接口中)。

票数 6
EN

Stack Overflow用户

发布于 2019-03-08 18:50:42

mvn dependency:tree,也许你有另一个使用hibernate-annotations的依赖项,并且与你的spring版本冲突,你也可以找到它们并从类路径中排除它们,如下所示:

代码语言:javascript
复制
 <exclusions>
    <exclusion>
       <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
    </exclusion>
  </exclusions>

我希望能帮到你。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47947293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档