Maven项目之间关系介绍

Maven项目之间关系 依赖关系

单纯的项目A中需要项目B中的资源,将项目B打成Jar包被A依赖,此时项目A直接调用项目B中资源即可。

项目A和项目B此时形成最基本的依赖关系。

继承关系

需要场景:
如果多个子项目中使用的是相同的依赖或插件,此时我们可以把相同的配置抽取到一个父项目中,进行统一的管理,保持一致性。所以继承关系此时显得比较重要,在java中,继承体现在代码功能上,而maven中的继承则体现在pom.xml,跟功能代码没有关系,当项目A继承了项目B,则项目A拥有了项目B的pom.xml文件中所有依赖。当然继承中也不同的用法和不同的场景。

我们在同级目录创建01_parent、02_child、03_child,一个父项目,两个子项目

01_parent的pom.xml:

<?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 "> <modelVersion>4.0.0</modelVersion> <!-- 将其作为maven项目的父项目,统一管理子项目的公共依赖 --> <groupId>org.example</groupId> <artifactId>01_parent</artifactId> <version>1.0-SNAPSHOT</version> <!-- 父项目的专有打包方式,该种方式,本项目不会被打包成 jar 或 war ,项目里 src 目录下代码无效(可删除), pom.xml 有效,只是作为其它项目的父项目使用. --> <packaging>pom</packaging> <properties> <spring-version>5.2.9.RELEASE</spring-version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <!--配置webmvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> </project>

02_child的pom.xml:

<?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 "> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.example</groupId> <artifactId>01_parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <!-- <groupId>org.example</groupId> 如果子项目和父项目在同一级目录,使用parent标签表明了父项目坐标后,子项目的groupId可以省去 --> <artifactId>02_child</artifactId> <version>1.0-SNAPSHOT</version> </project>

03_child的pom.xml:

<?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 "> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.example</groupId> <artifactId>01_parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>03_child</artifactId> <version>1.0-SNAPSHOT</version> </project>

然后我们看看maven项目之间的关系:

20210915102806

我们很明显的看到,两个子项目都成功的拥有了父项目的依赖。maven的基本继承关系就弄完了。

但是实际开发中,我们可能有多个功能不同得子项目,父项目中的依赖并不是每一个子项目都必须全部需要的。这个时候如果子项目拥有了父项目全部依赖就有点说不过去了,甚至可能产生jar包冲突。

这里我们可以使用<dependencyManagement>标签来解决我们上述的问题,这个标签的作用其实相当于一个对所依赖 jar 包进行版本管理的管理器.( dependencyManagement 里只是声明依赖,并不实现引入)

这样一来,父项目就像超市,子项目就像客户,父项目将部分不是基本的依赖放入其中,子项目需要就声明即可,不需要的话父项目也不会强人所难。

01_parent的pom.xml:

<?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 "> <modelVersion>4.0.0</modelVersion> <!-- 将其作为maven项目的父项目,统一管理子项目的公共依赖 --> <groupId>org.example</groupId> <artifactId>01_parent</artifactId> <version>1.0-SNAPSHOT</version> <!-- 父项目的专有打包方式,该种方式,本项目不会被打包成 jar 或 war ,项目里 src 目录下代码无效(可删除), pom.xml 有效,只是作为其它项目的父项目使用. --> <packaging>pom</packaging> <properties> <spring-version>5.2.9.RELEASE</spring-version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> <!--配置webmvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <!--dependencyManagement 标签中声明的依赖,只是作为一个 jar 包统一管理的管理器,实际上该标签中声明的依赖不会被引入--> <dependencyManagement> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.0</version> </dependency> </dependencies> </dependencyManagement> </project>

在01_parent这个“超市”中添加了log4j和commons-logging的两个依赖供子项目选择。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypgyw.html