Maven学习笔记(三):Maven的聚合和继承

Maven的聚合其实就是把各个项目拷贝到一个项目里,便于统一构建(这种是父子目录结构构件,个人喜欢这种,平行结构不喜欢),实现聚合的方式为:

-- 新建一个普通的Maven项目,只保留pom文件,其他的目录结构都删除

-- 配置新建项目的pom文件:

 1 <project ...>
 2     <modelVersion>4.0.0</modelVersion>
 3     <groupId>XXXX</groupId>
 4     <artifactId>XXXX</artifactId>
 5     <version>1.0.0-SNAPSHOT</version>
 6     <!-- 作为聚合项目,packaging必须为pom -->
 7     <packaging>pom</packaging>
 8     <name>XXXX</name>
 9     <modules>
10         <module>聚合项目1[注意路径匹配]</module>
11         <module>聚合项目2[注意路径匹配]</module>
12     </modules>
13 </project

-- 将要聚合的子项目拷贝入当前聚合项目

-- 对聚合项目执行mvn clean install 就可以构件所有的子项目了。

Maven的继承和Java的继承差不多,但是也有比较明显的区别。首先要实现继承,需要在pom文件中配置被继承的pom。

 1 <project ...>
 2     <modelVersion>4.0.0</modelVersion>
 3
 4     <parent>
 5         <groupId>XXXX</groupId>
 6         <artifactId>XXXX</artifactId>
 7         <version>XXXX</version>
 8         <relativePath>指定要继承的父项目的pom文件的相对路径</relativePath>
 9     </parent>
10
11     ....
12 </project>

这样配置后,父项目的pom文件就被当前项目继承了。那么,到底继承下来了什么东西呢?有两个,①依赖管理   ②插件管理

在父项目的pom文件中使用<dependencyManagement>来指定依赖规范:

 1 <properties>
 2         <springframework.version>2.5.6</springframework.version>
 4 </properties>
 5     <dependencyManagement>
 6         <dependencies>
 7             <dependency>
 8                 <groupId>org.springframework</groupId>
 9                 <artifactId>spring-core</artifactId>
10                 <version>${springframework.version}</version>
11             </dependency>
12             <dependency>
13                 <groupId>org.springframework</groupId>
14                 <artifactId>spring-beans</artifactId>
15                 <version>${springframework.version}</version>
16             </dependency>
17             <dependency>
18                 <groupId>org.springframework</groupId>
19                 <artifactId>spring-context</artifactId>
20                 <version>${springframework.version}</version>
21             </dependency>
22     </dependencyManagement>

在<dependencyManagement>中定义的依赖规范会被继承下来,但是并不等于这些依赖都会被继承下来,只有在子项目中再次显式定义了<dependencyManagement>中所具有的某个依赖时,这个依赖才会生效。也就是说,<dependencyManagement>中定义的是依赖规范,它规范了子项目能够使用哪些依赖,这些依赖的版本是多少,而不是强制要求子项目必须要实现这些依赖。这是和Java继承的明显区别。

至于插件管理和依赖管理类似,就不赘述了。

Maven学习笔记(三):Maven的聚合和继承

时间: 2024-12-26 11:52:02

Maven学习笔记(三):Maven的聚合和继承的相关文章

Maven学习笔记(三) :Maven使用入门

编写POM: Maven项目的核心是pom.xml.POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等. 现在先为Hello World项目编写一个最简单的pom.xml. <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" x

Maven学习笔记之——三套生命周期

Maven学习笔记之--三套生命周期 Maven命令的输入往往就对应了生命周期.比如mvncompile就表示执行默认生命周期阶段compile.Maven的生命周期是抽象的.其实际行为都是由插件完成的.比如mvncompile就可能会由maven-compile-plugin完成.生命周期和插件是协同工作. 1.    何为生命周期 项目构件中进行的清理.编译.测试及部署都可以视作一个一个项目的生命周期.但是每个项目每个人都有不一样的顺序不一样的实现方式.没有统一性带来的不方便已经不言而喻.

Maven学习笔记之——坐标和依赖(上)

Maven学习笔记之--坐标和依赖(上) 1.    Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到具体的构件.Maven的坐标元素包括groupId.artifactId.versiion.packaging.classifier.Maven内置了一个中央仓库地址.需要时Maven会根据坐标到其中下载.具体关于中央仓库的介绍在后面. 2.    Maven坐标详解 比如下面一组坐标: <groupId>org.andy.items</groupId> &l

Maven学习笔记之——坐标和依赖(中)

Maven学习笔记之--坐标和依赖(中) 1.    传递性依赖 1.1    何为传递性依赖 项目中经常有引入一个jar包还要引入其他与其相关的jar包.自己搜的话要注意很多.比如版本问题等.而Maven会解析解析各个直接依赖的POM.将哪些必要的间接依赖以传递依赖的形式引入到项目中. 依赖范围不仅可以控制依赖与三种classpath关系.还对传递依赖产生影响. 假设A依赖B,B依赖C,我们说A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖.第一直接依赖的范围和第二直接依赖

Maven学习笔记之——坐标和依赖(下)

Maven学习笔记之--坐标和依赖(下) 1.    最佳实践 归纳Maven依赖使用的常用技巧.方便用来避免和处理很多常见问题. 1.1.     排除依赖 传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理.但是有些时候这种特性也会带来问题.例如,当前项目有一个第三方依赖,而这个第三方依赖由于某些原因依赖了另外一个类库的SNAPSHOT版本,那么这个SNAPSHOT就会成为当前项目的传递性依赖,而SNAPSHOT的不稳定性会直接影响到当前的项目.这时候需要排除掉该SNAPSH

Maven学习笔记-使用Eclipse插件创建Java Webapp项目

使用Java的猿们,最多接触的大概就是web项目了吧?在学习Maven的过程中,首先当然就是创建一个webapp项目. 自己在尝试的过程中,碰到了很多的问题.我把详细的过程都记录下来,用以今后参考. 步骤: 如果未搭建好Maven开发环境,请参考前一篇:Maven学习笔记--环境搭建 打开Eclipse, 菜单栏选择File -> new -> other,在弹出的对话框中找到Maven Project. 在弹出的新建Maven项目的对话框中,不要勾选第一项"Create a sim

Maven学习笔记之——仓库(中)

Maven学习笔记之--仓库(中) 1.    远程仓库的配置 当出现默认的中央仓库无法满足我们的需求或者连接不上的时候.我们可以通过POM文件来指定远程仓库. <repositories> <repository> <id>jboss-maven2-release-repository</id> <name>JBoss Repository</name> <url>http://repository.jboss.org/

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

Maven学习笔记

Maven学习笔记 Maven是项目管理工具 1. 安装Maven 在apache官网(http://maven.apache.org/download.cgi) 下载apache-maven-3.3.3-bin.zip和apache-maven-3.3.3-src.zip:解压,把bin的位置设在环境变量里, 新建环境变量名:MAVEN_HOME 值:C:\Users\pengtao.yue\apache-maven-3.3.3\bin 在path中加入:%MAVEN_HOME% 在DOS中输