继承为了消除重复,可以把pom 中很多相同的配置提取出来;如:grouptId, version 等。
在使用的时候子工程直接继承父工程的依赖版本号,子工程中不再需要指定具体版本号,方便统一管控项目的依赖版本问题。
创建一个父工程,
父工程的pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>cn.sm1234</groupId> 5 <artifactId>sm1234-parent</artifactId> 6 <version>0.0.1-SNAPSHOT</version> 7 <packaging>pom</packaging> 8 <description>这是一个父工程,锁定版本</description> 9 10 <!-- 抽取相同的属性,如版本号,集中定义版本依赖号 --> 11 <properties> 12 <!-- 名称需要自定义 --> 13 <servlet.version>2.5</servlet.version> 14 <spring.version>5.1.3.RELEASE</spring.version> 15 </properties> 16 17 <!-- 抽取子工程的依赖配置 --> 18 <!-- 版本锁定,当子工程有需要并且自行添加了具体依赖后才有效 --> 19 <dependencyManagement> 20 <dependencies> 21 <!-- 依赖servlet的api --> 22 <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api --> 23 <dependency> 24 <groupId>javax.servlet</groupId> 25 <artifactId>servlet-api</artifactId> 26 <version>${servlet.version}</version> 27 <!-- privided依赖范围,编译时有效,但是运行发布的时候是无效的。 --> 28 <scope>provided</scope> 29 </dependency> 30 31 <!-- 依赖spring框架 --> 32 <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> 33 <dependency> 34 <groupId>org.springframework</groupId> 35 <artifactId>spring-beans</artifactId> 36 <version>${spring.version}</version> 37 </dependency> 38 39 <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> 40 <dependency> 41 <groupId>org.springframework</groupId> 42 <artifactId>spring-aop</artifactId> 43 <version>${spring.version}</version> 44 </dependency> 45 46 <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --> 47 <dependency> 48 <groupId>org.springframework</groupId> 49 <artifactId>spring-aspects</artifactId> 50 <version>${spring.version}</version> 51 </dependency> 52 53 </dependencies> 54 </dependencyManagement> 55 56 57 </project>
子工程的pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 4 <!-- 引用父工程 --> 5 <parent> 6 <groupId>cn.sm1234</groupId> 7 <artifactId>sm1234-parent</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <!-- 父项目的pom.xml文件的相对路径,一般可不指定 --> 10 <!-- <relativePath>../parent</relativePath> --> 11 </parent> 12 13 <modelVersion>4.0.0</modelVersion> 14 <artifactId>sm1234-web</artifactId> 15 <packaging>war</packaging> 16 17 <dependencies> 18 <dependency> 19 <groupId>javax.servlet</groupId> 20 <artifactId>servlet-api</artifactId> 21 <!-- 继承父工程后,版本号由父工程里面统一指定,不再需要特别指定 --> 22 <!-- <version>${servlet.version}</version> --> 23 <!-- privided依赖范围,编译时有效,但是运行发布的时候是无效的。 --> 24 <scope>provided</scope> 25 </dependency> 26 27 <!-- 依赖spring框架 --> 28 <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> 29 <dependency> 30 <groupId>org.springframework</groupId> 31 <artifactId>spring-beans</artifactId> 32 </dependency> 33 34 <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> 35 <dependency> 36 <groupId>org.springframework</groupId> 37 <artifactId>spring-aop</artifactId> 38 </dependency> 39 40 <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --> 41 <dependency> 42 <groupId>org.springframework</groupId> 43 <artifactId>spring-aspects</artifactId> 44 </dependency> 45 </dependencies> 46 47 <!-- JDK编译插件,改变JDK编译环境 --> 48 <build> 49 <plugins> 50 <!-- 1.java编译插件 --> 51 <plugin> 52 <groupId>org.apache.maven.plugins</groupId> 53 <artifactId>maven-compiler-plugin</artifactId> 54 <version>3.6.1</version> 55 <configuration> 56 <source>1.8</source> 57 <target>1.8</target> 58 <encoding>UTF-8</encoding> 59 </configuration> 60 </plugin> 61 62 <!-- 2.配置打包项目源码包的插件 --> 63 <plugin> 64 <groupId>org.apache.maven.plugins</groupId> 65 <artifactId>maven-source-plugin</artifactId> 66 <version>2.2.1</version> 67 <!-- 完成绑定.执行完打包后执行 --> 68 <executions> 69 <execution> 70 <goals> 71 <goal>jar-no-fork</goal> 72 </goals> 73 <phase>verify</phase> 74 </execution> 75 </executions> 76 </plugin> 77 78 <!-- 3.tomcat7插件 --> 79 <plugin> 80 <groupId>org.apache.tomcat.maven</groupId> 81 <artifactId>tomcat7-maven-plugin</artifactId> 82 <version>2.2</version> 83 <configuration> 84 <port>8080</port> 85 <server>tomcat7</server> 86 </configuration> 87 </plugin> 88 </plugins> 89 </build> 90 </project>
说明:在子工程中引入父工程的内容时,会有重复内容,会有黄色感叹号提示,我们只需将子工程的重复内容删除即可。
注意:
relativePath:父项目的 pom.xml 文件的相对路径。默认值为../pom.xml。maven首先从当前构建项目开始查找父项目的 pom 文件,然后从本地仓库,最后从远程仓库。RelativePath 允许你选择一个不同的位置;一般Eclipse 找不到 parent 项目时可以先update project,还不行则可配置此项。
如果所有子工程都需要依赖某些包,父工程可以通过设置依赖,将依赖关系传递到子工程中。
<dependencies>
//添加公共依赖包
</dependencies>
【注意】dependencyManagement 与 dependencies 的区别