文章目录
首先,无论是哪一种方式,作为父工程必须删除src文件和把packing改成pom
若不删除父工程src文件则子工程不能新建java包文件和java类等。
因为父工程下存在一个直系src的java工程了,子工程就不可以新建为java工程。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/30c8f8a5ae93057a57db73505780088e.png)
项目样例:
父工程中包含的标签
父工程作用就是引入项目全部所需要的外部依赖(jar包等),并进行管理
packing标签
- 父工程的 packaging 标签的文本内容必须设置为 pom。
properties标签
<!--在 properties 标签中,可以自定义标签名称来管理依赖的版本号,被管理的依赖版本号由“${算定标签名称}”来代替。-->
<properties>
<!--自定义的标签名称:“项目名称”+version 英文单词构成-->
<swagger.version>2.7.0</swagger.version>
</properties>
dependencyManagement标签与dependencies标签
最高级父maven项目需要使用<dependencyManagement>实现对子项目依赖的继承管理。
<dependencyManagement>
<dependencies>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
若没有使用dependencyManagement标签管理依赖
子模块会无条件继承父工程的所有依赖,导致的问题是,本不需要的继承的依赖也会被继承,这就大大增加了项目模块最终打包的大小,也可能为上线埋下了隐患。
也就是说,父工程管理的是所有项目模块的依赖,而不是某一个项目模块的依赖,所以
某一个项目模块不需要继承父工程中的所有依赖,这就需要子项目模块向父工程声明需要的
依赖即可(声明式依赖)。而此时,父工程实际只需要通过使用dependencyManagement管理依赖的版本号即可。
子工程声明式继承父工程dependencyManagement管理的依赖
由于父工程管理依赖的版本号,那么子模块要想继承依赖,只能通过声明式来添加依赖,
实际上,子模块中的依赖是继承父工程依赖的版本号,可以不使用<version>标签;
如果子模块已定义依赖版本号<version>,那么 以子模块定义的版本号为准。
子工程声明式继承添加父级项目依赖
先声明继承的父工程
<parent>
<artifactId>edu_parent</artifactId>
<groupId>com.qlugcl</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
再声明子工程需要继承使用父工程的依赖和版本号,可以不声明<version>标签
从而得知若子工程没有使用version标签则父工程是使用的dependencyManagement标签管理的依赖
<dependencies>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
总结
Maven管理多模块实现了各个工程模块之间的使用,提供了极大的方便,实现各个工程更加专业化的分工