背景
在做微服务项目时,需要用到sleuth分布式数据跟踪分析组件,在maven的pom中加入该组件依赖时,提示spring-cloud-starter-sleuth组件的pom失效。网上查找了许多相关帖子,没有找到与我对应的解决方法。
分析
先采用maven的dependency组件功能对项目依赖进行分析,没有发现sleuth组件问题。在回来问题出现处重新思考,可能是下载到本地的sleuth组件的pom出现了问题,于是使用maven的debug功能对项目进行分析。具体如下:
mvn -X clean package -DskipTests
console提示错误如下:
[WARNING] The POM for org.springframework.cloud:spring-cloud-starter-sleuth:jar:2.0.2.RELEASE is invalid, transitive dependencies (if any) will not be available: 1 problem was encountered while building the effective model for org.springframework.cloud:spring-cloud-starter-sleuth:2.0.2.RELEASE
[FATAL] Non-parseable POM /Users/apple/.m2/repository/io/zipkin/brave/brave-bom/5.4.3/brave-bom-5.4.3.pom: start tag not allowed in epilog but got p (position: END_TAG seen ...</dependencyManagement>\n</project>\n<p... @237:3) @ /Users/apple/.m2/repository/io/zipkin/brave/brave-bom/5.4.3/brave-bom-5.4.3.pom, line 237, column 3
注意到[FATAL]处,原来是本地的brave-bom组件的pom出现问题,打开该组件的pom,在line 237处发现该行及其以下行重复了标签的内容,删除保存后。重新debug项目,出现了类似于brave-bom组件错误的,brave-instrumentation-kafka-clients组件和brave-instrumentation-httpclient组件的错误。错误原因相同,删除多余的内容后,在重新debug项目,再没有错误提示。
进一步分析
之所以出现pom内容重复,可能是下载网络传输出现问题。我的maven的setting.xml中使用了center repository的aliyun镜像。在阿里云镜像中查找brave-bom-5.4.3.pom,没有发现内容重复的问题,那么应该是网络传输时出现了问题。内容已经接受完毕,然而没有及时给服务器回终止信号,导致内容重新传输。