Maven详解(八)------ 继承和聚合

1、继承

需求场景:

  有三个 Maven 工程,每个工程都依赖某个 jar 包,比如 Junit,由于 test 范围的依赖不能传递,它必然会分散在每个工程中,而且每个工程的jar 包版本可能不一致。那么如何管理各个工程中对于某个 jar 包的版本呢?

解决办法:

  将那个 jar 包版本统一提取到 “父" 工程中,在子工程中声明依赖时不指定版本,以父工程中统一设定的为准,同时也便于修改。

操作步骤:

  ①、创建父工程

   ②、在子工程中声明对父工程的引用

<!--子工程中声明对父工程的引用  -->
  <parent>
	  <groupId>com.ys.maven</groupId>
	  <artifactId>Parent</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <!-- 以当前工程文件为基准的父工程 pom.xml文件的相对路径(可以不配置) -->
	  <relativePath>../Parent/pom.xml</relativePath>
  </parent>

   ③、将子工程的坐标中与父工程坐标重复的内容删除(不删除也可以,为了简洁)

   ④、在父工程中统一那个 jar 的版本依赖

<dependencyManagement>
	  <dependencies>
	  	<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8</version>
			<scope>test</scope>
	  	</dependency>
	  </dependencies>
  
  </dependencyManagement>

dependencyManagement标签管理的依赖,其实没有真正依赖,它只是管理依赖的版本。

  ⑤、在子工程中删除 Junit 的版本号

以后要更改版本号,我们只需要更改父工程中的版本号即可!!!

  ⑥、父工程通过 properties 统一管理版本号

  我们可以通过<properties></properties>自定义标签,然后在标签里面填写常量,这种方法不仅可以用来管理版本号,还可以用来管理比如设置某种编码等等。

 2、聚合

需求场景:

  在真实项目中,一个项目有表现层、业务层、持久层等。我们在用Maven 管理项目的时候,通常为创建多个 Maven 工程,也就是一个项目的多个模块。但是这样分成多个模块了,当我们进行项目打包发布的时候,那么要每一个模块都执行打包操作吗?这种重复的操作我们怎么才能避免呢?

解决办法:

  创建一个聚合工程,将其他的各个模块都由这个聚合工程来管理,那么我们在进行项目发布的时候,只需要打包这个聚合工程就可以了。

第一步:创建聚合工程(注意聚合工程的打包方式也必须为 pom,通常由 上面所讲的父工程来充当聚合工程)

第二步:创建子工程:业务层

    ①、选择 Maven Module

     ②、填写子工程模块名,打包方式选择 jar(子工程除了 web 层我们打包方式选择 war ,其余的都选择 jar)

第三步:创建子工程:表现层和持久层

    创建步骤和前面一样,注意表现层打包方式我们要选择 war,因为要发布到 tomcat 容器运行。

  第四步:在聚合工程中添加子工程的引用

<modules>
  	<module>Service</module>
  	<module>Controller</module>
  	<module>Mapper</module>
  </modules>

   注意:

  1、这里虽然各个模块有依赖关系,但是 <module></modelu>可以不让依赖顺序添加,maven会自动识别依赖关系进行编译打包。

  2、这里总的聚合工程随便哪个工程都可以,但是通常用 Parent 工程来完成。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Petrichor的专栏

Python: logging日志模块详解

  CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET

671
来自专栏蓝天

mooon http-stress使用教程

http-stress是一个和ab(Apache Benchmark)类似的HTTP压力测试工具,是作为dispatcher和http_parser等测试用的附...

641
来自专栏腾讯Bugly的专栏

打造“微信小程序”组件化开发框架

导语 Bugly 之前发了一篇关于微信小程序的开发经验分享,小伙伴们在公众账号后台问了很多关于小程序开发方面的问题,精神哥在查阅相关内容的时候,发现了龚澄同学自...

4283
来自专栏PHP实战技术

20条Linux命令面试问答

问:1 如何查看当前的Linux服务器的运行级别?   答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别。 ...

2788
来自专栏Java技术栈

Spring Boot 2.x 新特性总结及迁移指南

这一篇文章主要讲解 Spring Boot 2.x 与 1.5.x 的区别,2.x 主要更新了什么东西,以便对 Spring Boot 2.x 有一个详细的了解...

932
来自专栏小程序之家

如何使用小程序导航

在日常开发小程序中,我们总不能吧所有数据都堆在首页。为此,需要一些二级三级页面。今天,我们来介绍介绍小程序比较重要的导航组件,使用导航组件,可以在小程序内外部进...

1775
来自专栏DevOps时代的专栏

如何使用 Jenkins 的脚本化流水线(Pipeline)

在这篇简单的教程中,你将会学习到 Jenkins 的流水线即代码,以及如何开发流水线脚本的指导。 Jenkins 是一个开源持续集成服务器,它可以提供持续执行自...

7137
来自专栏Android机动车

Dalvik、ART与JVM之间的关系

983
来自专栏游戏杂谈

shell删除指定目录下的svn目录

在发布或是部署一些项目时,需要先将资源上传到服务器。环境一般分为:本机、内网、公网,公网的话,考虑带宽问题,一般不允许将.svn目录和Thumbs.db文件上...

905
来自专栏惨绿少年

inotify+rsync实现实时同步

1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服务推送...

1900

扫码关注云+社区