记一次 Maven: Failed to read artifact descriptor的问题

如何出现:在对一个dubbo微服务进行版本升级的时候:

该微服务是一个聚合与继承项目A,其中包含API层B,以及API实现C。

ps:maven聚合的目的是为了快速构建项目,继承的目的是为了消除重复配置。子模块会继承父POM中的

properties,dependencyManagement,pluginManageMent等元素。

注意:聚合以及继承关系中的父POM的packaging都必须是pom。

 

回归正题:

将父项目A由1.0升级到1.1,子项目B与C的version也是1.1。

由于外部组件调用dubbo服务只需要API层,因此仅仅对API模块B进行了发布(maven deploy)。

外部组件也正常的引入了1.1版本的API层,代码编写完成(意味着类以及被引入),但是,但是在运行的时候,仍然会出现读不到B模块中的类?

打包的时候也会报:

Failed to execute goal on project xxx-service: Could not resolve dependencies for project......

 

看到这里?问题很明显

父模块没有deploy

因为API层继承了1.1的父模块的POM,而外部组件引入B,但是却找不到B的父模块(一些继承),从而maven下载包有问题,同时打包也有问题,运行时候找不到类也很正常了。

 

建议和总结:多模块项目升级

现在的项目一般都是聚合与继承项目,升级了父模块后(所有子模块都会继承其POM),这时候首先就是将父模块的POM发布 即deploy到远程。

 

你可能感兴趣的:(QA,Maven)