码迷,mamicode.com
首页 > 其他好文 > 详细

maven继承与聚合

时间:2020-05-03 20:45:52      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:style   pat   模块   必须   eal   lte   出现   hot   scope   

  实际项目中,可能正要构建一个大型的系统,但又不想一遍又一遍的重复同样的依赖元素,这种情况是经常出现的。不过还好,maven提供了继承机制,项目可以通过parent元素使用继承,可以避免这种重复。当一个项目声明一个parent的时候,它从父项目的POM中继承信息。它也可以覆盖父POM中的值,或者添加一些新的值。

一、创建Parent工程,打包方式为pom

技术图片

Parent/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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.nchu.maven</groupId>
    <artifactId>Parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
  <!--消除多模块依赖配置重复,我们知道依赖是可以继承的,既父模块中定义的依赖,子模块可自动继承,
    但是有些子模块需要,有些不需要的情况下该怎么办呢?那就必须用 <dependencyManagement> 标签了, dependencies 即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承) dependencyManagement 里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且 version 和 scope 都读取自父 pom; 另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
    子模块的 pom 中就可以使用
  <dependency>
   <groupId>junit</groupId>
   <artifactid>junit</artifactId>
</dependency> ,
    这样引用,没有引用的就不会自动继承
-->
<dependencyManagement> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> </dependencies> </dependencyManagement>
  <!--聚合--> <modules> <module>../HelloMaven</module> <module>../MavenLearn</module> <module>../WebProject</module> <module>FirstModel</module> <module>SecondModel</module> </modules> </project>
技术图片

聚合:将一个工程拆分为多个模块

二、在各个子工程中引用父工程

在父工程主目录上右键,选择other,搜索maven,选择Maven Model

技术图片

子模块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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.nchu.maven</groupId>
        <artifactId>Parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
     <!--
Maven假设父POM在本地仓库中可用,或者在当前项目的父目录(../pom.xml) 中可用。
如果两个位置都不可用,默认行为还可以通过relativePath元素被覆盖:
-->
<!--<relativePath>../Parent/pom.xml</relativePath>--> </parent> <artifactId>FirstModel</artifactId> <dependencies>
<!--子工程引入该依赖时,已经继承了父工程的依赖信息,子工程中的pom.xml就不需要指定以来的版本号了;-->
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> </dependencies> </project>
技术图片

  当一个项目指定一个父项目的时候,Maven在读取当前项目的POM之前,会使用这个父POM作为起始点。它继承所有东西,包括groupId和version。有了parent元素,一个POM就只需要定义一个artifactId。但这不是强制的,可以有一个不同的groupId和version,但如果不提供值,Maven就会使用在父POM中指定的值。如果开始使用Maven来管理和构建大型的多模块项目,你就会常常创建许多共享一组通用的groupId和version的项目。

  当继承一个POM,可以选择直接使用继承的POM信息,或者选择覆盖它。一个Maven POM从它父POM中可以继承定义符(groupId和artifactId中至少有一个必须被覆盖) 、依赖、开发者和贡献者、插件列表、报告列表、插件执行 (id匹配的执行会被合并)、插件配置。

  当Maven继承依赖的时候,它会将父项目中定义的依赖添加到子项目中。可以使用Maven的这一特征来指定一些在所有项目被广泛使用的依赖,让它们从顶层POM中继承。例如,如果系统全局使用Log4J日志框架,可以在你顶层 POM中列出该依赖,任何从该项目继承POM信息的项目会自动拥有Log4J依赖。 类似的,如果能确定每个项目都在使用同样版本的一个Maven插件,可以在顶层父POM的pluginManagement元素中显式的列出该Maven插件的版本

转自: https://www.cnblogs.com/realshijing/p/8253001.html

maven继承与聚合

标签:style   pat   模块   必须   eal   lte   出现   hot   scope   

原文地址:https://www.cnblogs.com/diumyself/p/12823068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!