maven继承关系配置
1、通过之前的演示现在可以发现一个问题,几乎每一个pom.xml文件都需要进行如下的几项基本配置:属性、相关插件。
于是这个时候就有可能产生这样的一些问题:假设你现在要进行开发的是一个公司的庞大项目,那么这个庞大的项目会存在有许多的子项目。

2、假设现在最大的副项目为:base,这个项目将需要提供一个公共的pom.xml文件,所以这个项目在搭建的时候应该搭建一个最基础的maven项目环境,而重点就应该放在pom.xml文件的编写上,由于该项目只具备有一个pom功能,这个项目的类型就应该设置为pom。
建立base/pom文件。
<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.gwolf</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 定义一个父pom.xml文件,所以此处必须为pom -->
<name>base</name>
<url>http://maven.apache.org</url>
<properties> <!-- 在以后的开发之中,所有的版本都交给base完成 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>1.8</jdk.version>
<junit.version>4.12</junit.version>
<spring.version>4.3.12.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build> <!-- 定义所有要使用的相关的处理插件 -->
<finalName>base</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encode>${project.build.sourceEncoding}</encode>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<encode>${project.build.sourceEncoding}</encode>
</configuration>
<executions>
<execution>
<id>sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

3、定义一个父pom.xml文件,所以此处必须为pom。

4、在属性中定义版本,在以后的开发之中,所有的版本都交给base完成

5、定义所有要使用的相关的处理插件。

6、此时所有的核心的配置选项都定义在父项目之中,而后每一个子项目都需要引用这个父项目的相关定义。
假设现在公司里面需要创建一个crm的子项目,于是这个时候依然创建一个普通的maven项目,为了演示方便,直接建立一个maven的web项目,这个项目的版本一定要由父项目来决定。
修改crm/pom.xml文件,实现继承关系。
<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/maven-v4_0_0.xsd">
<parent>
<groupId>com.gwolf</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>crm</artifactId>
<packaging>war</packaging>
<name>crm Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>crm</finalName>
</build>
</project>

7、相关的属性以及配置的插件都会自动的通过父项目继承而来。
实际上在整个父类的开发里面也提供有一些依赖包的管理问题,也就是说父类里面直接导入好所需要的开发包。
在base/pom.xml文件里面定义要使用的开发包。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>

8、这个时候对于子项目而言,实际上也需要继续导入开发包,与之前最大的区别是不需要管理版本编号问题了。
