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时,报以下错误:

[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多模块项目打包前的一些注意事项(打包失败)的更多相关文章
- SpringBoot+Maven 多模块项目的构建、运行、打包实战
前言 最近在做一个很复杂的会员综合线下线上商城大型项目,单模块项目无法满足多人开发和架构,很多模块都是重复的就想到了把模块提出来,做成公共模块,基于maven的多模块项目,也好分工开发,也便于后期微服 ...
- SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程
一,创建Maven多模块项目先建立外层父工程 File →new →project 选择Spring Initializr Next下一步到以下页面 工程结构如下 ...
- SpringBoot+Maven 多模块项目的构建、运行、打包
SpringBoot+Maven 多模块项目的构建.运行.打包 https://blog.csdn.net/zekeTao/article/details/79413919
- maven多模块项目构建
描述 一个大的企业级项目通常跨越了数十万行代码,牵涉了数十或数百软件人员的努力.如果开发者在同一个项目下开 发,那么项目的管理.构建将会变得很难控制.因此设计人员会将项目划分为多个模块,多个模块独 ...
- Spring Boot 项目实战(一)Maven 多模块项目搭建
一.前言 最近公司项目准备开始重构,框架选定为 Spring Boot ,本篇主要记录了在 IDEA 中搭建 Spring Boot Maven 多模块项目的过程. 二.软件及硬件环境 macOS S ...
- maven多模块项目找不到Class错误
接手了一个maven管理的多模块项目,又是javaconfig,又是spring data jpa,还算是比较新比较正规的模块化结构吧..然后我往其中的一个模块中新添加了一个jpa的entity,然后 ...
- springboot创建maven多模块项目
SpringBoot创建maven多模块项目 项目结构 该项目名称为springboot-maven-multi,由springboot-maven-multi.user-dao.user-domai ...
- maven多模块项目,多web合并项目使用心得
Fixflow,做中国最好的开源流程引擎!项目地址https://github.com/fixteam/fixflow 此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过 ...
- 在IntelliJ IDEA中创建Maven多模块项目
在IntelliJ IDEA中创建Maven多模块项目 1,创建多模块项目选择File>New>Project 出现New Project窗口左侧导航选择Maven,勾选右侧的Create ...
随机推荐
- HDU 5618:Jam's problem again(CDQ分治+树状数组处理三维偏序)
http://acm.hdu.edu.cn/showproblem.php?pid=5618 题意:…… 思路:和NEUOJ那题一样的.重新写了遍理解了一下,算作处理三维偏序的模板了. #includ ...
- Oracle数据库---存储过程、存储函数
--创建存储过程CREATE OR REPLACE PROCEDURE first_procISBEGIN DBMS_OUTPUT.PUT_LINE('我是过程'); DBMS_OUTPUT.PUT_ ...
- OSPF 单区域实验
实验拓扑 实验需求 按照图示配置 IP 地址 按照图示分区域配置 OSPF ,实现全网互通 为了路由结构稳定,要求路由器使用环回口作为 Router-id 实验步骤 每台路由器都要将本地的所有直连网段 ...
- 跟着大彬读源码 - Redis 4 - 服务器的事件驱动有什么含义?(上)
众所周知,Redis 服务器是一个事件驱动程序.那么事件驱动对于 Redis 而言有什么含义?源码中又是如何实现事件驱动的呢?今天,我们一起来认识下 Redis 服务器的事件驱动. 对于 Redis ...
- ng-bootstrap 组件集中 tabset 组件的实现分析
ng-bootstrap: tabset 本文介绍了 ng-bootstrap 项目中,tabset 的实现分析. 使用方式 <ngb-tabset> 作为容器元素,其中的每个页签以一个 ...
- mysql数据库建表分类字段--尽量少用字符串--原因探索
虽然一直都知道,类型 之类的字段 直接用字符窜会很方便,不过最好还是不要用字符串:但是也不是特别清楚为什么不要用,时间久了 就忍不住用一下字符窜试试,这一试 还挺好用的,吓得我 感觉探究了一下 为什么 ...
- RabbitMQ从入门到精通(三)
目录 1. 自定义消费者使用 自定义消费端演示 2.消费端的限流策略 2.1 限流的场景与机制 2.2 限流相关API 2.3 限流演示 3. 消费端ACK与重回队列机制 3.1 ACK与NACK 3 ...
- C语言入门8-数组-基本算法
一. 什么是数组 数组就是具有相同数据类型的有序集合. 分为一维数组.二维数组及多维数组. 一维数组就是用一个下标定义的数组 二维数组就是用二个下标定义的数组 我们把具有三个下标及三 ...
- 七、SQL 高级语法一
Case when Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE ...
- 常用socket函数详解
常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...
