zoukankan      html  css  js  c++  java
  • Maven基础2

    Maven的父子工程(继承)及聚合(多模块)

    maven的父子工程(继承):

    继承是 Maven 中很强大的一种功能,继承是为了抽取多个模块的公共配置,以实现统一/简化配置的目的。

    父 POM 中的大多数元素都能被子 POM 继承。除了以下元素外,其它元素均可被子模块继承:

    • artifactId
    • prerequisites
    • name

    继承可以有效的避免多个子模块使用依赖版本不一致的情况, 有助于降低依赖冲突的几率.
    父 pom 中的大多数元素都能被子 pom 继承, 在简化 pom 的同时, 还能够促进各个模块配置的一致性。

    依赖的继承

    1. 父项目中定义 <dependencies>,子项目直接继承了父项目的 ,从而不再需要引入这些依赖。

    2. 在 父 pom 中 <dependencyManagement>标签配置的依赖既不会给它的子模块引入依赖,仅仅表示它的配置是可继承的。子项目一旦使用,则无需指定它们的版本信息!

    关于<dependencyManagement>用法

    1. 父pom.xml声明依赖:
    <dependencyManagement>
               <dependencies>
                    <dependency><!-- 定义可能会使用的依赖 -->
                         <groupId>org.codehaus.mojo</groupId>
                         <artifactId>my-parent</artifactId>
                         <version>2.0</version>
                    </dependency>
    
                    <dependecy>...</dependecy><!-- 定义可能会使用的依赖 -->
                    <dependecy>...</dependecy><!-- 定义可能会使用的依赖 -->
               </dependencies>
         </dependencyManagement>
    
    1. 子项目引用依赖:

    不需要定义版本号, 只用填写<groupId><artifactId>表示继承父项目的声明,
    否则 maven 是不会加载父模块中声明的声明。

     <dependencies>
               <dependency>
                    <groupId>org.codehaus.mojo</groupId> <!-- 引用父pom的声明 -->
                    <artifactId>my-parent</artifactId>
                      ~~ <version>2.0</version> ~~  <!-- 不需要指定版本信息! -->
               </dependency>
         </dependencies>
    

    简单理解:

    简单来说,我们写两个不同的功能那么我们需要建两个不同的 Maven Project,那么我们需要配置两次 pom 文件,它们可能有大部分依赖是相同的,我们也要重复配置。如果功能更多呢?我们需要重复配置很多相同的东西,父子工程的出现就大大的简化了这些。我们抽取公共配置放在父项目,而子项目可以继承父项目的配置,这样大大简化了配置

    父项目:

    通常 Maven 的父项目是一个特殊项目,本质上,它是因为了复用配置而存在的项目,而并非一个实际意义上的真实的项目,因此父项目下完全不需要存在 java 包和 resources 包,父项目下只需要存在一个 pom.xml 文件即可。

    • 注意: 父项目的 package 类型是 pom 类型。

    子项目:

    注意: 子项目不一定非要在父项目里面,也可以和父项目是平级关系。

    如何创建一个父子项目呢:

    ①正常创建一个Maven Project ,作为父项目。完成可去掉 java 和 resources。

    ②创建一个Maven Project,在它的pom文件中指明它的父项目是谁?使用parent元素,如下实例:

    <!-- 指定它的父模块是谁 -->
         <parent>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>my-parent</artifactId>
            <version>2.0</version>
            <relativePath></relativePath>
        </parent>
        
    

    <relativePath> 元素用于指明本项目(子项目)的父项目的 pom 文件的路径名。例如:

    <!-- 对应写法,在硬盘上的目录层次结构中,子模块在父模块的『里面』。 -->
    <relativePath>../pom.xml</relativePath>
    
    <!-- 对应写法,在硬盘上的目录层次结构中,子模块和父模块『平级』。 -->
    <relativePath>../parent-module/pom.xml</relativePath>
    
    <!-- 对应写法,Maven 就不关心子模块和父模块在硬盘上的目录层次结构,它要求父模块在本地仓库中存在 -->
    <relativePath />
    
    • 如果完全没有<relativePath>元素,等同于:../pom.xml

    • 注意: 子项目不一定非得新建在父项目内。所以,默认的 ../pom.xml 并一定总是对的。

    Maven聚合

    Maven 聚合 功能是 继承 功能的『升级』。

    即,Maven 多模块项目一定是父子项目,Maven 父子项目则不一定是多模块项目。

    • Maven 继承(父子工程)的目的为了配置文件的复用和配置信息的统一管理。
    • Maven 聚合(多模块工程)目的是项目功能上的拆分。

    由于 Maven 多模块项目是父子项目的一种高级形式,因此,多模块项目也是有一个父模块包含一个或多个子模块,不过有几点不同:

    • 多模块项目中,子项目一定是在父项目『里面』的。

    • 多模块项目中,父项目中会『多出来』一个 <modules>元素。

    <modules>
        <module>modele1-service</module> <!--指定的子项目1-->
        <module>modele2-web</module> <!--指定的子项目2-->
        <module>bbb</module> <!--指定的子项目3-->
      </modules>
    

    如何安装运行maven聚合项目?

    在父模块的pom.xml中添加tomcat7的插件,然后正常的运行即可。tomcat7插件不要放在子模块的pom.xml身上,如果要放子模块上也只能放web模块身上。

    而上面这几个模块都需要安装发布到本地仓库才能正常运行,如果这些模块有任何变化都需要重新安装发布到本地仓库才能生效。建议放在父模块的pom文件中,不容易出错!

  • 相关阅读:
    JAVA泛类型(汽车Demo)
    java自定义事件机制分析
    ExtJS自定义事件
    模块化设计进化
    面向服务的SOA架构与服务总线ESB
    数据加密数字签名
    面试题
    一点ExtJS开发的感悟
    学习代理模式
    抽象类与接口
  • 原文地址:https://www.cnblogs.com/whitespaces/p/11745650.html
Copyright © 2011-2022 走看看