【Java】Maven项目报错汇总

前言

         最近在做项目,在Eclipse上编写java的过程中,经常碰到各种各样的错误,所以在这里将自己碰到的部分问题汇总,下面仅写出了自己的解决方法。不代表能够解决所有人的问题!供有需要的同仁参考,如有见解或更多解决方法,请留言指出。感谢!

问题一 报错如下:

BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

原因:spring初始化bean对象出错;

1)xml的bean的id 有重复;

2)如果是注解配置:可能是注解的名称有重复;

解决方法:只需要将重复的bean 的id和重复的注解改了就行了。

问题二 报错如下:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [F:\workSpaces\javaEE2\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\cxfSsh\WEB-INF\classes\cn\yangjieyu\controller\HelloController.class]; nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class

意思是:有个叫ClassMetadataReadingVisitor的类,以一个叫ClassVisitor的接口作为父类了

但是Java中类和接口的关系只能是实现,而不是继承。那么接下来我们在尝试在Eclipse中打开这个报错的类。

原因:首先查询org.springframework.core.type.classreading.ClassMetadataReadingVisitor【使用Ctrl+Shift+T 查询类】

【Java】Maven项目报错汇总_第1张图片

打开ClassMetadataReadingVisitor类(maven仓库中会下载源码,故打开第四个),可以看到类的声明如下:

class ClassMetadataReadingVisitor extends ClassVisitor implements ClassMetadata

然后查询org.springframework.asm.ClassVisitor

【Java】Maven项目报错汇总_第2张图片

在workspace中可以发现有5个这样的类,并且包名都一样。可以看到在spring-asm的3.0.7版本中这个ClassVistor其实是一个接口,这个接口被放在org.spring.asm包中。

下面检查一下我的maven依赖包:

【Java】Maven项目报错汇总_第3张图片

【Java】Maven项目报错汇总_第4张图片

明显看出,上面两者发生了冲突。必须删掉其中一个包,但是这里是maven项目,并且只有spring-core这个依赖,那么另一个asm.jar包就是因为加载其他依赖包时导入的。所以这里要通过maven解除此依赖关系。

 

【Java】Maven项目报错汇总_第5张图片

在过滤栏中输入asm,右侧出现了asm相关包的依赖结构,左侧则是pom.xml全部依赖包的列表展示。

解决方法:右击spring-asm:3.0.7 ->Exclude Maven Artifact

修改后对应的dependency部分文件如下:

<dependency>

              <groupId>org.apache.cxfgroupId>

              <artifactId>cxf-bundleartifactId>

              <version>${webserviceVersion}version>

              <exclusions>

                   <exclusion>

                       <groupId>org.springframeworkgroupId>

                       <artifactId>spring-asmartifactId>

                   exclusion>

              exclusions>

         dependency>

这样就通过maven解决了jar包依赖而报错的问题。

反思:在这个maven项目中,并没有发现自己添加过spring-asm的依赖,但是确实导入了这个jar包,所以不清楚包之间的依赖关系时,必须根据错误找到问题根源解决。另外,在maven处理依赖包时,不要随便加入依赖包,避免发生冲突。

问题三 报错如下:

java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration.(Lorg/springframework/expression/spel/SpelCompilerMode;Ljava/lang/ClassLoader;)V

原因:(1)缺少spring-expression jar包

解决方法:导入依赖

<dependency>

                <groupId>org.springframeworkgroupId>

                <artifactId>spring-expressionartifactId>

                <version>${springVersion}version>

         dependency>

问题四 报错如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cxf' defined in class path resource [META-INF/cxf/cxf.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0': Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException

关键:Error creating bean with name 'cxf' defined in class path resource [META-INF/cxf/cxf.xml]: BeanPostProcessor before instantiation of bean failed;

原因:注入bean失败异常

  1. 对应的bean没有添加注解
  2. 对应的bean注解错误
  3. 选择了错误的自动注解方法等

问题五 报错如下:

org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/classes/application-context.xml]; nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource

原因:缺少spring-aop-X.X.X.RELEASE.jar的包

解决方法:添加maven依赖;

<dependency>

            <groupId>org.springframeworkgroupId>

            <artifactId>spring-aopartifactId>

            <version>${springVersion}version>

        dependency>

问题六 报错如下:

[org.springframework.web.context.support.XmlWebApplicationContext]Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cxf' defined in class path resource [META-INF/cxf/cxf.xml]:

原因:如果使用cxf的版本是3.x以上的,那么在applicationContext.xml文件中只需要引入下面三个xml文件的第一个

<import resource="classpath:META-INF/cxf/cxf.xml" />

解决方法:只引入上面的第一个xml文件

问题七 报错如下:

java.lang.NoClassDefFoundError:[Lorg/springframework/context/ApplicationContextInitializer;

解决方法:添加spring-context.x.x.x RELEASE jar包

问题八 报错如下:

警告: Interceptor for {http://service.spring.demo/}HelloWorldImplService has thrown exception, unwinding now

org.apache.cxf.interceptor.Fault: No binding operation info while invoking unknown method with params unknown.

利用cxf发布webservice时,访问地址http://localhost:8080/cxfSpring/webservice/HelloWorld时,报错如上。

解决方法:将访问地址改为http://localhost:8080/cxfSpring/webservice/HelloWorld?wsdl即可访问到wsdl页面

 

 

 

 

你可能感兴趣的:(Java)