目录
Maven分模块开发
Maven多模块整合
建立Maven站点pom项目(一个父工程,多个子模块)
聚合工程;但是父工程不做具体的业务开发,仅仅只是做依赖包的版本管理,一个项目可以有多个子项目的做法
1.创建一个父项目(空项目,只有pom文件)
搭建多模块项目,必须要有一个packaging为pom的根目录
父项目只有一个pom文件,用来管理所有子项目的jar包
点击Finish完成
2.普通模块(多个子模块)
子模块可以多个添加;必须在父项目上点击右键:创建模块,不是创建项目(Maven Mudule)
如果需要一个引入一个模块,就使用dependencies引入一个模块
编辑器栏右击
在Pom文件中多了以下代码,也就是引入dao依赖
<dependencies>
<dependency>
<groupId>Maven_all</groupId>
<artifactId>dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
各模块打包类型
beans:实体类子模块,一般打包为jar
dao:数据访问层子模块,一般打包为jar
service:业务逻辑层子模块,一般打包为jar
web:表示层子模块,一般打包为war
父模块pom配置
父pom是为了抽取统一的配置信息和依赖版本控制,方便子pom直接引用,简化子pom的配置
1.父模块的打包类型
多模块项目中,父模块打包类型必须是pom,同时以给出所有的子模块,其中每个module,都是另外一个maven项目
2.继承设置
继承是maven中很强大的一种功能,继承可以使子pom获得parent中的各项配置,对子pom进行统一的配置和依赖管理。父pom中的大多数元素都能被子pom继承
maven项目之间的继承关系通过表示。这里使用的开发框架是spring boot,默认继承spring-boot-starter-parent
3.管理依赖版本号:dependencyManagement
一般在项目最顶层的父pom中使用该元素,让所有子模块引用一个依赖而不用显式的列出版本号。maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号
4.控制依赖包的版本号,便于版本维护:properties
在properties标签中,添加各依赖包的版本号,然后在dependency中直接引用该依赖版本号的值即可
关于exclusions标签
当dependency A自身的依赖B,与其他dependency存在冲突的时候(最常见的就是版本冲突),我们就需要把B排除掉,这时就需要使用exclusions元素。
那么怎么知道一个dependency自身包含哪些依赖呢?
1、通过mvn dependency:tree命令查看依赖树
2、使用IDEA或其他IDA查看依赖树
多模块简单案例
1.父模块(uuhe-plus)
<?xml version="1.0" encoding="UTF-8"?>
<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>com.uuhe</groupId>
<artifactId>uuhe-plus</artifactId>
<version>1.0.0</version>
<name>uuhe-plus</name>
<packaging>pom</packaging>
<modules>
<module>uuhe-demo1</module>
<module>uuhe-demo2</module>
</modules>
<properties>
<uuhe.version>1.0.0</letbe.version>
<spring-boot.version>2.7.9</spring-boot.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
<hutool.version>5.8.15</hutool.version>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
<!-- hutool 的依赖配置-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-bom</artifactId>
<version>${hutool.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- demo1模块 -->
<dependency>
<groupId>com.uuhe</groupId>
<artifactId>uuhe-demo1</artifactId>
<version>${letbe.version}</version>
</dependency>
<!-- demo2模块 -->
<dependency>
<groupId>com.uuhe</groupId>
<artifactId>uuhe-demo1</artifactId>
<version>${letbe.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<!--打包该目录下的 application.yml -->
<directory>src/main/resources</directory>
<!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
2.子模块(uuhe-demo1)
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>uuhe-plus</artifactId>
<groupId>com.uuhe</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>uuhe-demo1</artifactId>
<dependencies>
<!-- hutool 的依赖配置-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-bom</artifactId>
</dependency>
</dependencies>
</project>
2.子模块(uuhe-demo2)
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>uuhe-plus</artifactId>
<groupId>com.uuhe</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>uuhe-demo2</artifactId>
<dependencies>
<!-- hutool 的依赖配置-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-bom</artifactId>
</dependency>
</dependencies>
</project>