首先将datachange工程check out下来,然后open到idea中(我是将aicai-datachange整个都open进来了)
接下来jdk,maven什么的都要配置好(基本),配置完之后maven导入一下;
接着打开example下的Producer.java,执行main方法。
问题一,错误如下:
如上图:报了一个 NoClassDefFoundError 和 ClassNotFoundException 的错误,但是根据路径查找会发现GenericXmlApplicationContext这个类是存在的(NoClassDefFoundError错误:表示在编译期间通过,但运行期找不到);
最终解决的办法是:
根据报错信息看是在springframework/context下找不到,于是打开example工程下的pom.xml文件,找到spring-context的依赖,
将<scope>provided</scope>注释掉即不报错了,scope表示限制一个范围,provided表明该包只在编译和测试的时候用,
注释掉之后记得一定要重新import一下maven
注:再运行的时候发现还报错,但报错的是找不到spring-beans下的类了,因此同样将spring-beans下的scope也注释掉
再运行,问题二,报错信息如下:
Offending resource: class path resource [spring-context-producer.xml];
nested exception is org.springframework.beans.factory.BeanDefinitionStoreException:
Failed to read candidate component class: file [D:\z_other\aicai-datachange\aicai-datachange-client\target\classes\com\aicai\datachange\client\manager\DataChangeDOConverter.class];
nested exception is org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [D:\z_other\aicai-datachange\aicai-datachange-client\target\classes\com\aicai\datachange\client\manager\DataChangeDOConverter.class];
nested exception is java.lang.IllegalArgumentException
加载资源 spring-context-producer.xml 时报错,错误可以看到第三行说"无法读取组件类DataChangeDOConverter.class",但是往路径下一找,又有!懵逼,百度一下"Failed to read candidate component class:"发现问题:
要使用java8,只支持spring 4.X以上版本,而spring的使用最低java要求java5及以上
我往工程里一看,发现maven导入的spring确实都是3.x版本的,因此这里解决办法有2个:
1 修改jdk为jdk1.7(我使用的1.8)--不仅要修改idea中的jdk版本,还要记得修改所有pom文件中配置的java-version版本,若jdk修改你的不彻底则会报错:无效的源发行版:1.8
2 将pom.xml文件中配置的spring的依赖版本都改为4.X以上同一个版本即可(我本次采用的方法)重新import maven,再运行
最终,终于不报错了,成功跑起来了。。。