java - Spring Bean ClassNotFound 如何调试?

标签 java spring maven spring-mvc

我是 Spring 新手,收到以下错误

    java.lang.NoClassDefFoundError: org/springframework/beans/factory/NoUniqueBeanDefinitionException
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
java.lang.Class.getDeclaredMethods(Class.java:1855)
org.springframework.core.type.StandardAnnotationMetadata.hasAnnotatedMethods(StandardAnnotationMetadata.java:159)
org.springframework.context.annotation.ConfigurationClassUtils.isLiteConfigurationCandidate(ConfigurationClassUtils.java:104)
org.springframework.context.annotation.ConfigurationClassUtils.checkConfigurationClassCandidate(ConfigurationClassUtils.java:87)
org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:253)
org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:223)
org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:598)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:661)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:517)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:458)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2378)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:744)

根据我的搜索,我似乎缺少一个库,所以这是我的 POM

        <properties>
    <spring.version>3.2.0.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
        <scope>test</scope>
    </dependency>

    <!--Jersey-->
    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-spring3</artifactId>
        <version>2.5.1</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.3.0</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-xml-provider</artifactId>
        <version>2.3.0</version>
    </dependency>

    <!--Security-->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>3.2.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>3.2.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>3.2.0.RELEASE</version>
    </dependency>

    <!--Spring Data JDBC-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.0.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.0.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.28</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.0.Final</version>
    </dependency>

如果你们能帮我找出它是哪个库,我将不胜感激。 但是有人可以教如何调试这种错误吗? 我正在使用 Intelij Idea 13

这是 mvn dependency: Three 的输出

    [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ WebGest ---
    [INFO] com.springapp:WebGest:war:1.0-SNAPSHOT
    [INFO] +- org.springframework:spring-core:jar:3.2.0.RELEASE:compile
    [INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile
    [INFO] +- org.springframework:spring-web:jar:3.2.0.RELEASE:compile
    [INFO] |  +- org.springframework:spring-context:jar:3.2.0.RELEASE:compile
    [INFO] |  +- org.springframework:spring-aop:jar:3.2.0.RELEASE:compile
    [INFO] |  \- aopalliance:aopalliance:jar:1.0:compile
    [INFO] +- org.springframework:spring-beans:jar:3.2.0.RELEASE:compile
    [INFO] +- javax.servlet:servlet-api:jar:2.5:compile
    [INFO] +- javax.servlet.jsp:jsp-api:jar:2.1:provided
    [INFO] +- org.springframework:spring-webmvc:jar:3.2.0.RELEASE:compile
    [INFO] |  \- org.springframework:spring-expression:jar:3.2.0.RELEASE:compile
    [INFO] +- org.springframework:spring-test:jar:3.2.0.RELEASE:test
    [INFO] +- junit:junit:jar:4.8.2:test
    [INFO] +- org.glassfish.jersey.ext:jersey-spring3:jar:2.5.1:compile
    [INFO] |  +- org.glassfish.jersey.core:jersey-server:jar:2.5.1:compile
    [INFO] |  |  +- org.glassfish.jersey.core:jersey-common:jar:2.5.1:compile
    [INFO] |  |  |  +- javax.annotation:javax.annotation-api:jar:1.2:compile
    [INFO] |  |  |  \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
    [INFO] |  |  +- org.glassfish.jersey.core:jersey-client:jar:2.5.1:compile
    [INFO] |  |  +- com.google.guava:guava:jar:14.0.1:compile
    [INFO] |  |  +- org.glassfish.hk2:hk2-api:jar:2.2.0-b21:compile
    [INFO] |  |  +- org.glassfish.hk2.external:javax.inject:jar:2.2.0-b21:compile
    [INFO] |  |  +- org.glassfish.hk2:hk2-locator:jar:2.2.0-b21:compile
    [INFO] |  |  |  +- org.glassfish.hk2.external:asm-all-repackaged:jar:2.2.0-b21:compile
    [INFO] |  |  |  \- org.glassfish.hk2.external:cglib:jar:2.2.0-b21:compile
    [INFO] |  |  \- javax.validation:validation-api:jar:1.1.0.Final:compile
    [INFO] |  +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.5.1:compile
    [INFO] |  +- org.glassfish.hk2:hk2:jar:2.2.0-b21:compile
    [INFO] |  |  +- org.glassfish.hk2:hk2-utils:jar:2.2.0-b21:compile
    [INFO] |  |  |  \- javax.inject:javax.inject:jar:1:compile
    [INFO] |  |  +- org.glassfish.hk2:config-types:jar:2.2.0-b21:compile
    [INFO] |  |  +- org.glassfish.hk2:core:jar:2.2.0-b21:compile
    [INFO] |  |  +- org.glassfish.hk2:hk2-config:jar:2.2.0-b21:compile
    [INFO] |  |  |  +- org.jvnet:tiger-types:jar:1.4:compile
    [INFO] |  |  |  \- org.glassfish.hk2.external:bean-validator:jar:2.2.0-b21:compile
    [INFO] |  |  +- org.glassfish.hk2:hk2-runlevel:jar:2.2.0-b21:compile
    [INFO] |  |  \- org.glassfish.hk2:class-model:jar:2.2.0-b21:compile
    [INFO] |  +- org.glassfish.hk2:spring-bridge:jar:2.2.0-b21:compile
    [INFO] |  \- javax.ws.rs:javax.ws.rs-api:jar:2.0:compile
    [INFO] +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.3.0:compile
    [INFO] |  +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.3.0:compile
    [INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.3.0:compile
    [INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.3.0:compile
    [INFO] |  |  \- com.fasterxml.jackson.core:jackson-annotations:jar:2.3.0:compile
    [INFO] |  \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.3.0:compile
    [INFO] +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-xml-provider:jar:2.3.0:compile
    [INFO] |  +- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:jar:2.3.0:compile
    [INFO] |  +- org.codehaus.woodstox:stax2-api:jar:3.1.1:compile
    [INFO] |  |  \- javax.xml.stream:stax-api:jar:1.0-2:compile
    [INFO] |  \- org.codehaus.woodstox:woodstox-core-asl:jar:4.1.4:compile
    [INFO] +- org.springframework.security:spring-security-web:jar:3.2.0.RELEASE:compile
    [INFO] |  \- org.springframework.security:spring-security-core:jar:3.2.0.RELEASE:compile
    [INFO] +- org.springframework.security:spring-security-config:jar:3.2.0.RELEASE:compile
    [INFO] +- org.springframework:spring-jdbc:jar:4.0.0.RELEASE:compile
    [INFO] |  \- org.springframework:spring-tx:jar:4.0.0.RELEASE:compile
    [INFO] +- org.springframework:spring-orm:jar:4.0.0.RELEASE:compile
    [INFO] +- mysql:mysql-connector-java:jar:5.1.28:compile
    [INFO] \- org.hibernate:hibernate-core:jar:4.3.0.Final:compile
    [INFO]    +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile
    [INFO]    +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile
    [INFO]    +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.0.0.Final:compile
    [INFO]    +- dom4j:dom4j:jar:1.6.1:compile
    [INFO]    |  \- xml-apis:xml-apis:jar:1.0.b2:compile
    [INFO]    +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.4.Final:compile
    [INFO]    +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
    [INFO]    +- org.javassist:javassist:jar:3.18.1-GA:compile
    [INFO]    +- antlr:antlr:jar:2.7.7:compile
    [INFO]    \- org.jboss:jandex:jar:1.1.0.Final:compile
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.348s
    [INFO] Finished at: Mon Feb 03 21:43:43 WET 2014
    [INFO] Final Memory: 13M/217M
    [INFO] ------------------------------------------------------------------------

最佳答案

要解决此类问题,请在 findjar.com 中搜索该类。或者 grepcode.com ,在本例中为 the report from grepcode对于NoUniqueBeanDefinitionException

在那里我们可以看到该类不在 spring-beans jar 的 3.2.0 版本中,并且具有该类的最早版本是 3.2.1.RELEASE。

然后使用 mvn dependency:tree 检查项目中使用的版本,并进行相应调整,在本例中至少升级到 3.2.1.RELEASE。

关于java - Spring Bean ClassNotFound 如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21538273/

相关文章:

java - 如何从一台机器针对另一台机器运行ant脚本?

maven - 如何使用 JMockit 和 Maven 生成覆盖率报告?

java - MatLab 能理解 Java int 数据类型吗?

java - 无法使用 web3j 下载以太坊 Activity

java - Spring 安全 : how to pass additional user info to JSP?

javascript - 如何将网页中的字符串输入作为 Java 对象传递给 @RestController?

java - Spring boot getOutputStream() 已被调用用于此响应

java - 当点击输入时

Spring Boot @Value 属性

java - 是否有任何理由在 Maven 中为我自己的传递依赖项保留显式依赖声明?