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