commons-io版本冲突解决方案,此方法可解决Maven依赖版本冲突问题

JAVA中的坑

  • 写在前面
    • HtmlUnit,利用java获取完整的HTML(包含css,js加载完成之后的效果)
    • commons-io版本冲突解决方案

写在前面

项目中遇到需要爬虫,但是目标网址存在着动态js加载数据,通过普通的http请求获取下来的Doc为js源 码,并不是我们所想要的,爬虫我只是想拿到我(用户)所看到的内容,所以辗转百度百度百度-论坛,终于 在CSDN中找到了自己想要的东西。

HtmlUnit,利用java获取完整的HTML(包含css,js加载完成之后的效果)

HtmlUnit原贴地址:https://blog.csdn.net/johnson_moon/article/details/78457543

然后就开始着手写代码,但是代码中遇到了各种问题,然后又开始百度,原来程序员都是面向百度编程,
首先解决的是一个httpclient的一来问题,原来原贴中的demo有一些一来问题,按照以下步骤解决了问题
当在使用htmlUnit时遇到无法定位org.apache.http.impl.client.HttpClientBuilder.dnsResolver类时,此时所需要的依赖包为:


org.apache.httpcomponents
httpclient
4.5.2

运行maven之后的结果为:

此问题完美解决,接着运行程序出现一下错误:
java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal

此问题主要时找不到xml解析包,解决方式:


xml-apis
xml-apis
1.4.01

此问题解决,接着在运行程序,出现一下错误
com.gargoylesoftware.htmlunit.ScriptException: Exception invoking getOffsetTop
这个错误不太好找,是htmlunit内部的错误,最终找到原因是由于解析抓取到的html页面时出的错


    xerces
    xercesImpl
    2.9.1
	

xercesImpl包的版本过低导致该错误,升级为2.11.0版本即可


    xerces
    xercesImpl
    2.11.0

原贴地址 https://www.cnblogs.com/leinuo2016/p/6252837.html

- PS:然后有请下一个问题!

commons-io版本冲突解决方案

这次报错的代码不认识!不认识! 就下来还是请百度来讲,搜了几下,大概可以确认是jar包版本冲突,引用多个jar,版本不同。

然后在项目中找,确认了是commons-io 包版本冲突,然后又去百度,然而这次百让我失望了,并没有找到commons-io 版本冲突的解决方法。


			commons-fileupload
			commons-fileupload
			1.4
		

commons-fileupload 引用了commons-io 2.2


			net.sourceforge.htmlunit
			htmlunit
			2.27
		

net.sourceforge.htmlunit 引用了commons-io 2.5

导致版本冲突,maven仓库中commons-fileupload最新版为1.4,最后更新时间为2018,应该是没有更新了,然后想更改net.sourceforge.htmlunit的版本,net.sourceforge.htmlunit 2.10使用的是commons-io 2.2,但是net.sourceforge.htmlunit 2.10版本部分新方法不支持
commons-io版本冲突解决方案,此方法可解决Maven依赖版本冲突问题_第1张图片
然后又去麻烦百度,这次Get了一个新的知识点,Maven依赖可以相互传递,无奈本人没文化。。。
附上为我增加知识的大佬博客原贴:https://www.cnblogs.com/lonecloud/p/5692146.html
然后我就想依赖传递,谁先加载就以谁为标准,高版本兼容低版本,这样是否就能解决我现在的问题了呢,答案:Yes!我调换了一下依赖的引入顺序,高版本引用放在前边,问题成功解决。

PS: 无奈本人文笔差,只能说些口水话。
向所有使我增加知识的大佬致敬!

你可能感兴趣的:(JAVA中的坑)