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


    一、

    最近在打包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时,报以下错误:

    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

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

    而打包 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)


    四、

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


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



  • 相关阅读:
    [20191108]内核参数tcp_keepalive与sqlnet.ora expire_time的一些总结.txt
    [20191106]善用column格式化输出.txt
    [20191101]通过zsh计算sql语句的sql_id.txt
    [20191101]完善vim的bccalc插件8.txt
    [20191031]完善vim的bccalc插件7.txt
    [20191013]oracle number类型存储转化脚本.txt
    [20191012]组成rowid.txt
    文件下载中文问题
    关闭 macOS Google Chrome 黑暗模式风格
    删除最后一次提交
  • 原文地址:https://www.cnblogs.com/heihei1990/p/13858708.html
Copyright © 2020-2023  润新知