Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Maven 父子项目

Maven 父子项目

作者头像
郑小超.
发布于 2023-10-16 11:13:39
发布于 2023-10-16 11:13:39
25700
代码可运行
举报
文章被收录于专栏:GreenLeavesGreenLeaves
运行总次数:0
代码可运行

1、创建父项目

cmd进入项目工作目录,执行以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn archetype:generate

 创建成功,接着修改pom.xml如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>testparentgroupid</groupId>
  <artifactId>testparentartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>testparentartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

注:修改packageing打包方式为pom,父项目的packageing设置为pom,才能去管理其他工程.

2、父项目创建子项目

cmd进入父项目pom.xml所在的目录,执行构建代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn archetype:generate

 子项目创建成功,此时Maven修改了父项目的pom.xml内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>testparentgroupid</groupId>
  <artifactId>testparentartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>testparentartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
<modules>  <module>testchild1artifactId</module>
  </modules>
</project>

新增了modles节点,将子项目包含到了里面.建立了父项目与子项目的关联.通过modles节点,子项目的pom.xml内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>testparentgroupid</groupId>
    <artifactId>testparentartifactId</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>testchild1groupId</groupId>
  <artifactId>testchild1artifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>testchild1artifactId</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

可以看到新生成了一个parent节点,Maven自动建立了子项目父项目的关联通过parent节点.

注:如果子项目和父项目的groupId和version一样,一般情况下是一样的.这两个属性可以删除,只保留artifactId,所以修改子项目pom如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>testparentgroupid</groupId>
    <artifactId>testparentartifactId</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <artifactId>testchild1artifactId</artifactId>
  <name>testchild1artifactId</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

到这里,父子项目已经建立了关联

3、父项目管理所有依赖信息

修改父项目的pom.xml,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>testparentgroupid</groupId>
  <artifactId>testparentartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>testparentartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  
  <modules>  
    <module>testchild1artifactId</module>
  </modules>
</project>

父项目通过dependencyManagement节点引入了一系列的sping框架依赖.注意这里只是一个列表而已,不会真正的去下载这些依赖.可以通过cmd进入父项目的pom.xml,执行如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn dependency:list

可以发现父项目没有去执行任何下载包的操作

修改子项目的pom.xml如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>tpgroupId</groupId>
    <artifactId>tpartifactId</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>tpchild1groupId</groupId>
  <artifactId>tpchild1artifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>tpchild1artifactId</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
 <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
      </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

这里添加了spring-aop的依赖.因为本地maven仓库和相关仓库没有,所以如下图

 执行了相关下载.同时在切换为父项目查看依赖,cmd进入父项目的pom.xml目录,执行如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn dependency:list

 父项目依然没有依赖.

到这里,可以菜刀父项目提供了一个依赖列表,其提供了依赖默认的版本,可以在子项目中不指定依赖的版本,而采用父项目的版本,因为上面的子项目并没有指定spring-aop的具体版本,但是却下载了父项目中的spring-aop的版本.所以pom项目有一定的版本管理功能,version遵循以下规律:

(1)、父项目已经引入的依赖,子项目可以不用写version ,此时子项目采用父项目的version

(2)、如果子项目写了version和父项目的version不一致,采用子项目的version

4、查看子项目的依赖层级

cmd进入指定子项目的pom.xml,执行如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn dependency:tree

5、父项目升级管理的所有依赖项的版本

修改父项目的pom.xml如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>tpgroupId</groupId>
  <artifactId>tpartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>tpartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.1.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <modules>
    <module>tpchild1artifactId</module>
  </modules>
</project>

升级spring相关项目的版本到4.1.0,接着cmd进入子项目的pom.xml所在的目录执行如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn dependency:list

 可以看到下载了4.1.0相关的包,依赖解析结果也显示升级到了4.1.0相关的版本,再看下本地Maven仓库

 4.0.0和4.1.0都存在于仓库中

6、父子项目添加自定义属性,控制pom中的相关配置

修改父项目pom.xml如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>tpgroupId</groupId>
  <artifactId>tpartifactId</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>tpartifactId</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <custome.spring.version>4.2.0.RELEASE</custome.spring.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${custome.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <modules>
    <module>tpchild1artifactId</module>
  </modules>
</project>

这里在properties节点下新增了custome.spring.version节点,并修改了依赖列表中所有spring相关项目的version节点为 <version>${custome.spring.version}</version>

接着cmd定位到父项目所在的pom.xml,执行如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn dependency:list

 可以看到子项目开始下载4.2.0版本的相关包.说明自定义属性配置成功,这里也可以在子项目的pom.xml中配置自定义属性.并不是只能在父项目中配置

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringCloud项目父工程搭建
这里我使用 IntelliJ IDEA 作为开发工具,在 IDEA 当中新建一个 MAVEN 项目,项目的 pom.xml 文件配置如下,注意配置文件当中的 <packaging> 必须设置为 pom:
小小杰啊
2022/12/21
3440
IDEA Maven父子项目操作
 这里不修改GroupId,采用和父项目一样的目录结构,点击创建,查看子项目目录结构
郑小超.
2023/10/16
5760
IDEA Maven父子项目操作
idea中Springboot项目如何做成父子结构
什么是父子结构呢,父子结构就是maven里面的同时有一个父项目和多个子项目的项目结构,并且子项目可以使用父项目的pom配置以及依赖的版本号等等。
算法之名
2019/08/20
2.2K0
idea中Springboot项目如何做成父子结构
Maven 核心原理解析(2)
聚合与继承 Maven的聚合特性(aggregation)能够使项目的多个模块聚合在一起构建, 而继承特性(inheritance)能够帮助抽取各模块相同的依赖、插件等配置,在简化模块配置的同时, 保持各模块一致. 模块聚合 随着项目越来越复杂(需要解决的问题越来越多、功能越来越重), 我们更倾向于将一个项目划分几个模块并行开发, 如: 将feedcenter-push项目划分为client、core和web三个模块, 而我们又想一次构建所有模块, 而不是针对各模块分别执行$ mvn命令. 于是就有了Mav
Java帮帮
2018/03/16
1.1K0
猿实战02——Spring+mybatis+maven+多模块框架搭建姿势
猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是问题。想要一起实战吗?,关注公主号猿人工厂,获取基础代码,手把手带你开发属于自己的电商系统。 从今天开始,我们将进入猿实战的阶段,实现一个前后端分离的电商系统,没有开发框架怎么行?今天是第一个系列,猿人君将带你搭建后端开发框架。
山旮旯的胖子
2020/08/21
8110
猿实战02——Spring+mybatis+maven+多模块框架搭建姿势
Maven+SpringMVC+Dubbo 简单的入门demo配置
哎_小羊
2018/01/02
3.1K0
Maven+SpringMVC+Dubbo 简单的入门demo配置
【记录】idea创建springboot多模块项目
新建 Module成功后,父依赖pom.xml会自动注册新创建的Module。代码如下:
鳄鱼儿
2024/05/21
1770
【记录】idea创建springboot多模块项目
使用Maven创建Springboot的父子工程
1、在eclipse开发工具中创建一个新的Maven项目,项目类型为quickstart,如下所示:
别先生
2020/10/30
9880
使用Maven创建Springboot的父子工程
使用Maven构建的Springboot父子工程的项目打包部署
1、SpringBoot作为微架构的主要实现技术,其发布项目的方式极为简单,只需要在项目中配置好插件,然后打包执行就可以了,并且这个执行不需要特别复杂的配置。
别先生
2020/10/30
2.2K0
使用Maven构建的Springboot父子工程的项目打包部署
Maven pom.xml中的元素modules、parent、properties以及import
  项目中用到了maven,而且用到的内容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么简单;maven的核心是pom.xml,那么我就它来谈谈那些不同的地方;
青石路
2018/09/10
2.5K0
Maven pom.xml中的元素modules、parent、properties以及import
第二章:ActiveMQ与spring的整合使用
在之前建好的工程的主目录下建一个resource目录,然后建一个配置文件,我这里是activeMq.xml
全栈程序员站长
2022/08/05
2500
第二章:ActiveMQ与spring的整合使用
项目管理构建工具——Maven(高阶篇)
Maven作为我们项目管理构建的常用工具,具备许多功能,在这篇文章中我们来仔细介绍
秋落雨微凉
2022/10/25
1.4K0
项目管理构建工具——Maven(高阶篇)
idea从零搭建springcloud
创建父工程 修改编码集 注解生效 选择编译jdk版本 修改pom文件 父类pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt
用户5899361
2021/05/06
9120
MyEclipse创建SSH项目(Java web由maven管理)
13、去数据中看是否创建了“department”表,如果如下图,恭喜。SSH工程成功搭建。
王小雷
2019/05/26
8440
IDEA springboot多模块架构
一、项目结构 二、创建过程: 1、创建父类项目选择为pom类型 2、创建web模块 3、创建entity模块、service模块,两个模块创建方式一样 4
用户5899361
2020/12/07
5070
IDEA springboot多模块架构
[Maven进阶]聚合和继承
我们的项目已经从以前的单模块,变成了现在的多模块开发。项目一旦变成了多模块开发以后,就会引发一些问题,在这一节中我们会介绍两个内容聚合和继承,用这两个知识来解决下分模块后的一些问题。
十八岁讨厌编程
2022/12/10
8030
『互联网架构』软件架构-Spring boot快速开始及核心功能介绍(中)(85)
【注意:执行jar的jdk版本需要与jar打包编译的版本一致。如果配置了环境变量,直接使用java命令打包即可】
IT架构圈
2019/06/19
4510
『互联网架构』软件架构-Spring boot快速开始及核心功能介绍(中)(85)
Maven 扫盲(下)
第一篇文章大概的介绍了一下Apache Maven以及它的下载和安装,并且运行了一个简单的示例。那么在对maven有了一点接触后,接下去的一步是要了解maven的核心概念,这样才能在使用maven的时候游刃有余。
哲洛不闹
2018/09/18
5200
Maven 扫盲(下)
架构:第四章:微服务架构下的分布式架构之搭建环境
下面是我要写的一个简单的分布式架构:SpringCloud+SpringBoot+SpringMVC+MyBatis+MySQL
Java廖志伟
2022/09/28
4430
架构:第四章:微服务架构下的分布式架构之搭建环境
【十七】搭建SpringCloud项目一(Eureka)
从本章开始从0搭建SpringCloud项目,再逐步进行优化,加入其它组件。 本次首先整合springcloud五大组件中的发现服务(Eureka)。 发现服务:专门负责服务的注册和发现,在开发时,方便了解哪些服务在哪些机器上运行着,占用的哪些端口等情况。 本章先进行结构的搭建,SpringCloud项目就是一个一个的Spring项目合在一起的,所以新建一个maven项目,再在maven项目里面新建多个Spring项目即可,如下:
小z666
2024/06/21
3130
【十七】搭建SpringCloud项目一(Eureka)
推荐阅读
相关推荐
SpringCloud项目父工程搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档