Maven命令行:继承

 继承

(1)概念

Maven工程之间,a工程继承b工程

  • b工程:父工程
  • a工程:子工程

本质上是a工程的pom.xml中的配置继承了b工程中的pom.xml的配置

(2)作用

在父工程中统-管理项目中的依赖信息, 具体来说是管理依赖信息的版本。

它的背景是:

●对一个比较大型的项目进行了模块拆分。

●一个project下面,创建了很多个module.

●每一个module都需要配置自己的依赖信息。

它背后的需求是:

●在每一个module中各自维护各自的依赖信息很容易发生出入,不易统- -管理。

●使用同一个框架内的不同jar包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统-.

●使用框架时所需要的jar包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。

通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的jar包;又能够将以往的经验

沉淀下来,节约时间和精力。

创建父子工程

1.创建

创建的过程和前面创建pro01-maven-java一样

执行:cmd执行mvn archetype:generate

工程创建完成之后,需要修改他的打包方式为pom

 <!-- 坐标信息 -->
 <!-- groupId 标签:坐标向量之一。代表公司或组织开发的某一个项目 -->
  <groupId>com.tinstu.maven</groupId>
  
  <!--artifactId 标签:坐标向量之一。代表项目下的某一个模块-->
  <artifactId>pro01-maven-java</artifactId>
  
  <!--version 标签:坐标向量之一,代表当前模块的版本-->
  <version>1.0-SNAPSHOT</version>
  <!--packaging 标签:当前工程打包的方式-->
  <!--jar :java 工程,生成jar工程//////war:web工程,生成war包 ///// pom:说明这个工程是用来管理其他工程的工程-->
  <packaging>pom</packaging>

之后创建出pro03-maven-parent

2.创建模块工程

进入pro03-maven-parent工程的目录内,运行mvn archetype:generate命令创建模块工程

3.查看被添加新内容的父工程pom.xml

下面modules和module标签是聚合功能的配置 (聚合)

  <modules>  
     <module>pro04-maven-module</module>
     <module>pro05-maven-module</module>
     <module>pro06-maven-module</module>
  </modules>

4.子工程的pom.xml下自动生成parent标签

  <!--parent 标签给当前工程配置父工程-->
  <parent>
    <!--通过指定父工程的坐标找到父工程-->
    <groupId>com.tinstu.maven</groupId>
    <artifactId>pro03-maven-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

++++:子工程的groupId如果和父工程一样,则可以省略,version也可以

在父工程中管理依赖

  <!--在父工程中统一管理依赖信息-->
  <!--注意:即使在父工程配置了对依赖的管理,子工程需要使用具体哪一种依赖还是要明确配置-->
  <dependencyManagement>
     <dependencies>
	   <dependency>
	     <groupId>org.springframework</groupId>
		 <artifactId>spring-core</artifactId>
		 <version>4.0.0.RELEASE</version>
	   </dependency>
	   <dependency>
	     ........
	   </dependency>
	 </dependencies>
  </dependencyManagement>

子工程的pom.xml中的<dependency></dependency>    可以不写版本号 <version>

如果子工程没写<version> 子工程采纳的是父工程管理的版本 (实现一处修改,处处生效)

如果子工程写了<version> ,那么这里子工程配置的版本会覆盖父工程管理的版本并最终采纳.

配置自定义属性

19行定义,31行引入

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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.tinstu.maven</groupId>
  <artifactId>pro03-maven-parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>pro03-maven-parent</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<!--创建我们自定义的属性标签-->
	<!--标签名 :属性名-->
	<!--标签值 :属性值-->
	<!--应用方式:${tinstu.spring.version}-->
	<tinstu.spring.version>4.0.0.RELEASE</tinstu.spring.version>
  </properties>

  <modules>  
     <module>pro04-maven-son</module>
  </modules>
  <!--在父工程中统一管理依赖信息-->
  <dependencyManagement>
     <dependencies>
	   <dependency>
	     <groupId>org.springframework</groupId>
		 <artifactId>spring-core</artifactId>
		 <version>${tinstu.spring.version}</version>
	   </dependency>
	   <dependency>
	     ........
	   </dependency>
	 </dependencies>
  </dependencyManagement>
</project>

继承的实际意义

安装:

让pro4依赖pro5,pro5在依赖pro6

	   <!--测试聚合之后可以一键安装,让pro4依赖pro5-->
	    <dependency>
	     <groupId>com.tinstu.maven</groupId>
		 <artifactId>pro05-maven-module</artifactId>
		 <version>1.0-SNAPSHOT</version>
	   </dependency>

在pro3中运行安装

*********不可再让pro6依赖pro4,否则报错

[ERROR] The projects in the reactor contain a cyclic reference

这个错误含义:循环引用

阅读剩余
THE END