zoukankan      html  css  js  c++  java
  • 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在某些需求下,会改动,改动就重新发布,未改动无需重新发布;)



  • 相关阅读:
    Nginx练习练习玩玩
    MySQL Lock--MySQL加锁规则
    MySQL Transaction--RR事务隔离级别下加锁测试
    MySQL Transaction--RC事务隔离级别下加锁测试
    MySQL Transaction--事务隔离级别基础
    MySQL Transaction--快照读和当前读
    MySQL Transaction--RC和RR区别
    MySQL Disk--NAND Flash原理
    MySQL Disk--SSD与RAID
    MySQL Disk--SSD磁盘性能抖动问题
  • 原文地址:https://www.cnblogs.com/xiami2046/p/13858708.html
Copyright © 2011-2022 走看看