Maven学习之继承(非常优秀的有关Maven继承的介绍)

目录

概念

作用

它的背景是:

它背后的需求是:

举例

操作

①创建父工程

②创建模块工程

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

 ④解读子工程的pom.xml

⑤在父工程中配置依赖的统一管理

⑥子工程中引用那些被父工程管理的依赖

 ⑦在父工程中升级依赖信息的版本

⑧在父工程中声明自定义属性

实际意义


概念

Maven工程之间,A 工程继承 B 工程

  • B 工程:父工程
  • A 工程:子工程

本质上是 A 工程的 pom.xml 中的配置继承了 B 工程中 pom.xml 的配置。

作用

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

它的背景是:

  • 对一个比较大型的项目进行了模块拆分。
  • 一个 project 下面,创建了很多个 module。
  • 每一个 module 都需要配置自己的依赖信息。

它背后的需求是:

  • 在每一个 module 中各自维护各自的依赖信息很容易发生出入,不易统一管理。
  • 使用同一个框架内的不同 jar 包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。
  • 使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。

通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。

举例

在一个工程中依赖多个 Spring 的 jar 包

TIP

[INFO] +- org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- org.springframework:spring-beans:jar:4.0.0.RELEASE:compile
[INFO] +- org.springframework:spring-context:jar:4.0.0.RELEASE:compile
[INFO] +- org.springframework:spring-expression:jar:4.0.0.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:4.0.0.RELEASE:compile
[INFO] | \- aopalliance:aopalliance:jar:1.0:compile

 使用 Spring 时要求所有 Spring 自己的 jar 包版本必须一致。为了能够对这些 jar 包的版本进行统一管理,我们使用继承这个机制,将所有版本信息统一在父工程中进行管理。

操作

①创建父工程

创建的过程和前面创建Maven的Java项目一样,你可以点击这个连接进行查看我之前手动创建的Maven的Java项目,现在我们还是使用手动的方式来创建,后面会说如何使用开发工具idea进行创建。

工程名称:pro03-maven-parent

我们还是在这个目录下创建

Maven学习之继承(非常优秀的有关Maven继承的介绍)_第1张图片

 Maven学习之继承(非常优秀的有关Maven继承的介绍)_第2张图片

 项目创建完毕

Maven学习之继承(非常优秀的有关Maven继承的介绍)_第3张图片

工程创建好之后,要修改它的打包方式:

com.csdn.maven
  pro03-maven-parent
  1.0-SNAPSHOT
  
  pom

 只有打包方式为 pom 的 Maven 工程能够管理其他 Maven 工程。打包方式为 pom 的 Maven 工程中不写业务代码,它是专门管理其他 Maven 工程的工程。

②创建模块工程

模块工程类似于 IDEA 中的 module,所以需要进入 pro03-maven-parent 工程的根目录,然后运行 mvn archetype:generate 命令来创建模块工程。

假设,我们创建三个模块工程:

Maven学习之继承(非常优秀的有关Maven继承的介绍)_第4张图片

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

Maven学习之继承(非常优秀的有关Maven继承的介绍)_第5张图片

 ④解读子工程的pom.xml



   
    com.csdn.maven
    pro03-maven-parent
    1.0-SNAPSHOT
  



  com.csdn.maven
  pro04-maven-module
  1.0-SNAPSHOT
  pro04-maven-module
  http://maven.apache.org

⑤在父工程中配置依赖的统一管理




	
		
			org.springframework
			spring-core
			4.0.0.RELEASE
		
		
			org.springframework
			spring-beans
			4.0.0.RELEASE
		
		
			org.springframework
			spring-context
			4.0.0.RELEASE
		
		
			org.springframework
			spring-expression
			4.0.0.RELEASE
		
		
			org.springframework
			spring-aop
			4.0.0.RELEASE
		
	

⑥子工程中引用那些被父工程管理的依赖

关键点:省略版本号





	
		org.springframework
		spring-core
	
	
		org.springframework
		spring-beans
	
	
		org.springframework
		spring-context
	
	
		org.springframework
		spring-expression
	
	
		org.springframework
		spring-aop
	

 ⑦在父工程中升级依赖信息的版本

Maven学习之继承(非常优秀的有关Maven继承的介绍)_第6张图片

 然后在子工程中运行mvn dependency:list,效果如下:

TIP

[INFO] org.springframework:spring-aop:jar:4.1.4.RELEASE:compile
[INFO] org.springframework:spring-core:jar:4.1.4.RELEASE:compile
[INFO] org.springframework:spring-context:jar:4.1.4.RELEASE:compile
[INFO] org.springframework:spring-beans:jar:4.1.4.RELEASE:compile
[INFO] org.springframework:spring-expression:jar:4.1.4.RELEASE:compile

⑧在父工程中声明自定义属性



	UTF-8
	
	
	4.3.6.RELEASE

在需要的地方使用${}的形式来引用自定义的属性名:

Maven学习之继承(非常优秀的有关Maven继承的介绍)_第7张图片

真正实现“一处修改,处处生效”. 

实际意义

Maven学习之继承(非常优秀的有关Maven继承的介绍)_第8张图片

编写一套符合要求、开发各种功能都能正常工作的依赖组合并不容易。如果公司里已经有人总结了成熟的组合方案,那么再开发新项目时,如果不使用原有的积累,而是重新摸索,会浪费大量的时间。为了提高效率,我们可以使用工程继承的机制,让成熟的依赖组合方案能够保留下来。

如上图所示,公司级的父工程中管理的就是成熟的依赖组合方案,各个新项目、子系统各取所需即可。

你可能感兴趣的:(Maven,Java开发,Maven,maven)