• Maven——继承和聚合


      实际项目中,可能正要构建一个大型的系统,但又不想一遍又一遍的重复同样的依赖元素,这种情况是经常出现的。不过还好,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> 标签了,
        子模块的 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插件的版本

  • 相关阅读:
    记录一次有意思的XSS过滤绕过2
    2018年总结
    记录一次Oracle注入绕waf
    记录一次有意思的XSS过滤绕过
    绕过阿里云waf进行SQL注入
    CRLF在过滤XSS语句后打Cookie方式
    JavaWeb之商品查看后历史记录代码实现
    Mysql注入小tips --持续更新中
    JDK动态代理(Proxy)的两种实现方式
    ajax 异步刷新
  • 原文地址:https://www.cnblogs.com/realshijing/p/8253001.html
Copyright © 2020-2023  润新知