您的位置:首页 > 编程语言 > Java开发

pom中引入新依赖项后项目启动报错问题研究

2016-08-10 13:20 756 查看
最近在联调百度云音视频直播 LSS时,在pom中加入bce-java-sdk依赖后,原来的项目启动就出现了问题,挺奇怪的,现记录问题及解决方法如下:

问题一、项目启动控制台打印的日志格式和级别完全变了

详细描述:项目中采用的是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包冲突
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java pom 异常 maven
相关文章推荐