pom中引入新依赖项后项目启动报错问题研究
2016-08-10 13:20
756 查看
最近在联调百度云音视频直播 LSS时,在pom中加入bce-java-sdk依赖后,原来的项目启动就出现了问题,挺奇怪的,现记录问题及解决方法如下:
解决思路如下:
首先想到会不会是日志配置文件没有加载的原因。通过在加载代码处加断点,发现配置文件能正确加载,没有出现异常,排除这种可能。
然后就陷入了困境,感觉太奇怪了,进行各种尝试:Project clean啊,Maven build啊,Maven->Update Project...啊,Server clean、添加、删除等,依旧没有解决。在我快要怀疑人生时,脑中灵光一闪,应该是pom中新引入bce-java-sdk依赖项导致的,因为之前项目还好好的,就是引入这个依赖申明后启动才出问题的。
带着这个判断,我查看了项目的Maven Dependencies下的jar包,猛得发现多了两个依赖包logback-classic、logback-core,至此我明白原因所在了。其实很简单,就是因为多了这两个jar包,slf4j日志门面优先采用了logback日志框架,导致log4j及其配置没有被加载使用,说白了,就是此时控制台打印的日志是按照logback默认的debug级别及格式打印的。
那么问题来了,这两个jar包又是怎么引用进来的? 显然,应该是bce-java-sdk依赖引入的,查看项目pom文件的Dependency Hierarchy如下:
很明显就是因为bce-java-sdk依赖包间接引入了logback相关依赖导致的。
解决方法就很简单了,在pom文件中的dependency节点下加入exclusions声明即可,如下:
日志打印问题就这样解决,然后重启项目,遇到第二个问题了
不用说又是bce-java-sdk依赖惹的祸,查看Dependency Hierarchy依赖层级结构如下:
由于项目中原先引用的httpclient依赖版本是4.2.6,低于bce-java-sdk中要求的版本,所以报类找不到错误。修改httpclient依赖项版本为4.3.5即可
问题一、项目启动控制台打印的日志格式和级别完全变了
详细描述:项目中采用的是log4j日志框架,在log4j.properties中配置的日志打印级别为INFO,但是控制台却打出了很多DEBUG类型日志,并且日志打印格式也不是配置文件中指定的格式。解决思路如下:
首先想到会不会是日志配置文件没有加载的原因。通过在加载代码处加断点,发现配置文件能正确加载,没有出现异常,排除这种可能。
然后就陷入了困境,感觉太奇怪了,进行各种尝试:Project clean啊,Maven build啊,Maven->Update Project...啊,Server clean、添加、删除等,依旧没有解决。在我快要怀疑人生时,脑中灵光一闪,应该是pom中新引入bce-java-sdk依赖项导致的,因为之前项目还好好的,就是引入这个依赖申明后启动才出问题的。
带着这个判断,我查看了项目的Maven Dependencies下的jar包,猛得发现多了两个依赖包logback-classic、logback-core,至此我明白原因所在了。其实很简单,就是因为多了这两个jar包,slf4j日志门面优先采用了logback日志框架,导致log4j及其配置没有被加载使用,说白了,就是此时控制台打印的日志是按照logback默认的debug级别及格式打印的。
那么问题来了,这两个jar包又是怎么引用进来的? 显然,应该是bce-java-sdk依赖引入的,查看项目pom文件的Dependency Hierarchy如下:
很明显就是因为bce-java-sdk依赖包间接引入了logback相关依赖导致的。
解决方法就很简单了,在pom文件中的dependency节点下加入exclusions声明即可,如下:
<dependency> <groupId>com.baidubce</groupId> <artifactId>bce-java-sdk</artifactId> <version>0.10.6</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </exclusion> </exclusions> </dependency>
日志打印问题就这样解决,然后重启项目,遇到第二个问题了
问题二、类文件找不到错误
详细错误信息如下:Caused by: java.lang.NoClassDefFoundError: org/apache/http/client/methods/CloseableHttpResponse at com.baidubce.AbstractBceClient.<init>(AbstractBceClient.java:109) at com.baidubce.AbstractBceClient.<init>(AbstractBceClient.java:117) at com.baidubce.services.lss.LssClient.<init>(LssClient.java:218)
不用说又是bce-java-sdk依赖惹的祸,查看Dependency Hierarchy依赖层级结构如下:
由于项目中原先引用的httpclient依赖版本是4.2.6,低于bce-java-sdk中要求的版本,所以报类找不到错误。修改httpclient依赖项版本为4.3.5即可
总结
maven提供了很快捷的方式构建项目,引入外部jar时只需要在pom文件中增加依赖申明即可,但是要注意新引入的依赖项,是否间接引入了基它的依赖包,导致与项目中原有jar包冲突。相关文章推荐
- 关于Maven启动项目时总是下载POM的问题
- maven引入jar包问题导致项目无法启动,感叹号
- 运行ASP.NET出现的问题:无法直接启动带有"类型输出类型"的项目
- Tomcat启动项目时出现getJspApplicationContext(ServletContext) 问题的解决办法
- Cocos2d-x--新建Cocos2d-x项目出现的问题--系统无法启动程序,系统找不到指定的路径
- 关于 Eclipse 使用Tomcat 启动项目时的内存溢出问题
- 如何解决项目的冷启动问题?如果是你来运营一个刚出生的产品,会怎么做呢
- 常见问题:试图运行项目时出错:无法启动调试 没有正确安装调试器。请运行安装程序安装或修复调试器
- ssh项目启动tomcat出现的问题
- maven项目找不到pom.xml配置的dependency jar中的类问题解决方法
- 关于加了hibernate 框架的项目启动特别慢的问题
- 关于把struts2项目修改为开发模式,项目无法启动问题说明
- 语义研究(开源)项目启动中
- JAVA项目直接触之新手遇到的问题:引入web project运行tomcat后,出现:严重: Error listenerStart
- CRM项目中三个实务问题研究
- Cocos2d-x--新建Cocos2d-x项目出现的问题--系统无法启动程序,系统找不到指定的路径
- Spring中WebApplicationContext的研究(关于启动的问题)
- 常见问题:试图运行项目时出错:无法启动调试 没有正确安装调试器。请运行安装程序安装或修复调试器
- 大项目研究经费分配中出现的问题不是中国文化引起的。与施一公、饶毅商榷
- 个性化推荐研究(五)之冷启动问题