欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Maven多模块项目打包前的一些注意事项(打包失败)

程序员文章站 2022-06-21 19:50:30
一、 最近在打包Maven项目时遇到了点问题,这个项目是Maven多模块项目,结构如下: projectParent├── xxxx-basic├── xxxx-web1├── xxxx-collector└── xxxx-web2 projectParent 为父项目,无任何代码,就是个空壳,

一、

最近在打包maven项目时遇到了点问题,这个项目是maven多模块项目,结构如下:

projectparent
├── xxxx-basic
├── xxxx-web1
├── xxxx-collector
└── xxxx-web2


projectparent 为父项目,无任何代码,就是个空壳,<packaging>pom</packaging>;
xxxx-basic 为基础项目,它依赖于projectparent,里面含有一些model、dao、xml等,下面三个项目都依赖它,<packaging>jar</packaging>;
xxxx-web1 为web项目,它依赖于xxxx-basic,<packaging>war</packaging>;
xxxx-collector 为springboot项目,它依赖于xxxx-basic,可单独启动,不用管它。
xxxx-web2 为web项目,它依赖于xxxx-basic,<packaging>war</packaging>;

 

二、

现在要发布xxxx-web2到服务器,打包xxxx-web2时,报以下错误:

Maven多模块项目打包前的一些注意事项(打包失败)

 

1 [warning] the pom for com.zc:xxxx-basic:jar:0.0.1-snapshot is missing, no dependency information available
2 [error] failed to execute goal on project xxxx-web2: could not resolve dependencies for project com.zc:xxxx-web2:war:0.0.1-snapshot: could not find artifact com.zc:xxxx-basic:jar:0.0.1-snapshot in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public) -> [help 1]

 


从打印出来的日志可以看出,无法找到 com.zc:xxxx-basic:jar:0.0.1-snapshot 在nexus-aliyun(阿里云私服)

xxxx-basic明明是本地项目,为什么会去nexus-aliyun下载呢?


这里解释一下,maven在下载依赖时会先在本地仓库查找,如若未找到,则会去内网私服查找,如若仍未找到,再去远程仓库查找。
去本地仓库看了一下,很明了,本地仓库没有xxxx-basic:jar:0.0.1-snapshot,内网私服也没搭建,所以它直接去远程仓库找了(我们的远程仓库配置的阿里云私服),直到最后未找到,报错。

三、

先去发布(install)xxxx-basic模块到本地仓库,再打包xxxx-web2

Maven多模块项目打包前的一些注意事项(打包失败)

发布(install) xxxx-basic模块到本地仓库 成功(如上图)。

 

Maven多模块项目打包前的一些注意事项(打包失败)

而打包 xxxx-web2 时又失败(如上图)。

1 [error] failed to execute goal on project xxxx-web2: could not resolve dependencies for project com.zc:xxxx-web2:war:0.0.1-snapshot: failed to collect dependencies at com.zc:xxxx-basic:jar:0.0.1-snapshot: failed to read artifact descriptor for com.zc:xxxx-basic:jar:0.0.1-snapshot: could not find artifact com.zc:projectparent:pom:0.0.1-snapshot in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public) -> [help 1]


只看最后一句,无法找到 com.zc:projectparent:pom:0.0.1-snapshot在nexus-aliyun(阿里云私服)

很显然,和上一个错误一样。xxxx-web2 依赖 xxxx-basic,而 xxxx-basic 依赖于projectparent,projectparent的pom在本地仓库没有,所以maven又去远程仓库查找,未找到,报错。

这样再把父项目的pom发布(install)到本地仓库就可以了。在这里需要注意的是,当 install 整个父项目时,它下面的 所有子模块项目 也会一同发布到本地仓库。比较费时,有些模块又不需要,放在本地仓库还占空间。

 

针对这种父项目 install 时,两种解决方法:

1、直接install父项目,等待一会,全部发布成功后,在本地仓库中查找到其余不用的模块,直接删除,不再占用磁盘空间。

2、在不需要发布到本地仓库的 '子模块项目' 的pom.xml内加入

1 <properties>
2     <maven.install.skip>true</maven.install.skip>
3 </properties>

 

(http://maven.apache.org/plugins/maven-install-plugin/install-mojo.html)

 

Maven多模块项目打包前的一些注意事项(打包失败)


四、

发布 (install) projectparent 父项目到本地仓库,跳过其余四个子模块项目,成功。

Maven多模块项目打包前的一些注意事项(打包失败)

 


projectparent模块、xxxx-basic模块在本地仓库都有了,之后再去打包 xxxx-web2 就成功了。
(父模块基本不会改,一般不需要重新发布;xxxx-basic在某些需求下,会改动,改动就重新发布,未改动无需重新发布;)

Maven多模块项目打包前的一些注意事项(打包失败)

Maven多模块项目打包前的一些注意事项(打包失败)