一、

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

 [WARNING] The POM for com.zc:xxxx-basic:jar:0.0.-SNAPSHOT is missing, no dependency information available
[ERROR] Failed to execute goal on project xxxx-web2: Could not resolve dependencies for project com.zc:xxxx-web2:war:0.0.-SNAPSHOT: Could not find artifact com.zc:xxxx-basic:jar:0.0.-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 时又失败(如上图)。

 [ERROR] Failed to execute goal on project xxxx-web2: Could not resolve dependencies for project com.zc:xxxx-web2:war:0.0.-SNAPSHOT: Failed to collect dependencies at com.zc:xxxx-basic:jar:0.0.-SNAPSHOT: Failed to read artifact descriptor for com.zc:xxxx-basic:jar:0.0.-SNAPSHOT: Could not find artifact com.zc:projectParent:pom:0.0.-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内加入

 <properties>
<maven.install.skip>true</maven.install.skip>
</properties>

详情可查看官网介绍(http://maven.apache.org/plugins/maven-install-plugin/install-mojo.html)

四、

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

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

Maven多模块项目打包前的一些注意事项(打包失败)的更多相关文章

  1. SpringBoot+Maven 多模块项目的构建、运行、打包实战

    前言 最近在做一个很复杂的会员综合线下线上商城大型项目,单模块项目无法满足多人开发和架构,很多模块都是重复的就想到了把模块提出来,做成公共模块,基于maven的多模块项目,也好分工开发,也便于后期微服 ...

  2. SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程

    一,创建Maven多模块项目先建立外层父工程         File →new →project  选择Spring Initializr          Next下一步到以下页面 工程结构如下 ...

  3. SpringBoot+Maven 多模块项目的构建、运行、打包

    SpringBoot+Maven 多模块项目的构建.运行.打包 https://blog.csdn.net/zekeTao/article/details/79413919

  4. maven多模块项目构建

    描述 一个大的企业级项目通常跨越了数十万行代码,牵涉了数十或数百软件人员的努力.如果开发者在同一个项目下开   发,那么项目的管理.构建将会变得很难控制.因此设计人员会将项目划分为多个模块,多个模块独 ...

  5. Spring Boot 项目实战(一)Maven 多模块项目搭建

    一.前言 最近公司项目准备开始重构,框架选定为 Spring Boot ,本篇主要记录了在 IDEA 中搭建 Spring Boot Maven 多模块项目的过程. 二.软件及硬件环境 macOS S ...

  6. maven多模块项目找不到Class错误

    接手了一个maven管理的多模块项目,又是javaconfig,又是spring data jpa,还算是比较新比较正规的模块化结构吧..然后我往其中的一个模块中新添加了一个jpa的entity,然后 ...

  7. springboot创建maven多模块项目

    SpringBoot创建maven多模块项目 项目结构 该项目名称为springboot-maven-multi,由springboot-maven-multi.user-dao.user-domai ...

  8. maven多模块项目,多web合并项目使用心得

    Fixflow,做中国最好的开源流程引擎!项目地址https://github.com/fixteam/fixflow 此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过 ...

  9. 在IntelliJ IDEA中创建Maven多模块项目

    在IntelliJ IDEA中创建Maven多模块项目 1,创建多模块项目选择File>New>Project 出现New Project窗口左侧导航选择Maven,勾选右侧的Create ...

随机推荐

  1. HDU 2795:Billboard(线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Problem Description   At the entrance to th ...

  2. [WPF自定义控件库]好用的VisualTreeExtensions

    1. 前言 A long time ago in a galaxy far, far away....微软在Silverlight Toolkit里提供了一个好用的VisualTreeExtensio ...

  3. 客户端持久化数据库---indexedDB使用

    _ 阅读目录 一:什么是indexedDB数据库? 二:IndexedDB数据库操作 2.1 打开或创建数据库 2.2 创建对象仓库(或叫创建表) 2.3 创建索引 2.4 新增数据 2.5 读取数据 ...

  4. 【深入浅出-JVM】(序)

    本系列主要是让一个刚入门的 java 开发者,也能愉快的从零开始成为一个真正的 jvm 大神. 大纲 java 虚拟机的定义.总体架构.常用配置 垃圾回收算法.各类垃圾回收器 java 虚拟机对多线程 ...

  5. centos 上安装redis 3.0.5

    官网下载安装包,直接使用make编译,报如下错误 : [root@localhost redis-3.0.5]# make cd src && make all make[1]: 进入 ...

  6. Python PyQT5的入门使用

    Python 3+ PyQT5的入门使用 窗口类型介绍 QMainWindow,QWidget和QDialog都是用来创建窗口的.可以直接使用也可以继承后再使用. QMainWindow 该类窗口可以 ...

  7. Bzoj 1079 着色方案 题解

    1079: [SCOI2008]着色方案 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2237  Solved: 1361[Submit][Stat ...

  8. SpringBoot Jpa入门案例

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 我们先来了解一下是什么是springboot jpa,springboo ...

  9. 调用另一个进程,createprocess返回值正确,但被调进程连入口函数都没进入。

    1.单独运行被调进程(提示atl不匹配). 2.编译选项设置为不依赖atl即可. 3.启发:能单独测试的,先单独测试.

  10. stack用法,queue用法,

    stack stack 模板类的定义在头文件中. stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要 的,在不指定容器类型时,默认的容器类型为deque. 定义st ...