maven 05: 多模块管理

2年前 (2022) 程序员胖胖胖虎阿
211 0 0

业务背景

  • 实际开发中一个大的项目由若干子模块(子项目)组成,各模块之间存在相互依赖,各模块又可能依赖其他第三方模块

    • 为了便于项目开发和管理,适应分布式开发框架,多模块管理显得尤为重要
  • 业务背景图示

maven 05: 多模块管理

maven多模块管理:方式1

创建父工程

  • 如何实现多模块管理:顶级工程管理子级工程(也即:父工程管理子工程)

    • pom是项目对象模型,该文件可以被子项目继承
      • maven多模块管理,其实就是让子项目的pom文件继承父工程的pom文件
  • maven父工程必须遵循以下两点要求

    • packaging标签的文本内容必须设置为pom
    • 把src目录删掉
      • 父工程里其实不写代码(负责管理)
  • 父工程pom文件图示:

maven 05: 多模块管理

创建java子工程

  • 创建一个新的maven模块

    • 选择maven的java框架
    • 创建时选定parent
  • < groupId >和< version > 与父模块一致

  • 子项目的pom文件继承自父项目的pom文件

  • 子项目的pom文件图示:

maven 05: 多模块管理

创建web子工程

  • 创建一个新的maven模块
    • 选择maven的web框架
    • 创建时选定parent
  • 操作步骤几乎和创建maven的java项目一样

子工程上升为父工程

  • 只要遵循成为父项目的2点要求,就可以作为其他项目的父项目
    • packaging标签的文本内容必须设置为pom
    • 把src目录删掉
  • 一般开发中,设置两级,即:父模块 ----> 管理 ----> 子模块,不设置较多的层级

maven项目设置为子模块

  • 完成认领操作
    • 在待设置为子项目的maven项目的pom文件中,添加parent标签
      • 指明父项目的坐标 + 父项目pom文件的相对路径

maven父工程与依赖

父工程添加依赖

  • 父工程添加需要的依赖
    • 各个子工程不需要再添加依赖,无条件继承父工程里的依赖
  • 不足:子项目中出现依赖冗余

父工程管理依赖

  • 为了避免依赖冗余,父工程需要加强对依赖的管理

    • 依赖管理示例

      <!-- 加强对依赖的管理 --> 
      <dependencyManagement>
          <dependencies>
            <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.13.2</version>
              <scope>test</scope>
            </dependency>
          </dependencies>
      </dependencyManagement>
      
  • 子项目在pom文件中申请父项目pom文件中的依赖

    • 依赖版本号继承自父工程,由父工程限制

      • 若子工程声明了自己依赖的版本号,就近原则
    • 声明示例

      <!-- 声明需要的依赖 -->
      <dependencies>
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <scope>test</scope>
           </dependency>
      </dependencies>
      
  • 可以发现父工程最后管理的核心就是依赖的版本号

    • 可以将需要管理的版本号单独拿出来管理

      • 通过定义maven全局变量的形式来管理
    • 自定义格式的要求:依赖的项目名称.version

    • 配置示例

        <!-- 属性配置 -->
        <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <maven.compiler.source>1.8</maven.compiler.source>
          <maven.compiler.target>1.8</maven.compiler.target>
      
          <!-- 依赖版本控制 -->
          <junit.version>4.13.2</junit.version>
      
        </properties>
      
        <dependencyManagement>
          <dependencies>
            <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>${junit.version}</version>
              <scope>test</scope>
            </dependency>
          </dependencies>
        </dependencyManagement>
      

maven多模块管理:方式2

创建父工程

  • 直接创建一个maven的新项目
  • 按照maven父工程的要求,修改pom文件和项目结构

创建java子工程

  • 将新的maven子工程,添加到目标父工程里面
    • 选择java框架
  • 此时jave子项目在父项目目录下

创建web子工程

  • 将新的maven子工程,添加到父工程里面
    • 选则web框架
  • 和创建java子项目的操作几乎相同

子工程上升为父工程

  • 遵循maven父工程的2点要求即可
  • 查询子模块和实际在< modules >标签里显示的子模块的区别
    • 查询时:查询所有后代
    • 标签里:只显示子模块(隔代的不显示)

maven父工程与依赖(与方式1操作方式相同)

父工程添加依赖

父工程管理依赖

maven多模块管理:方式3

  • 方式1和方式2的混合
版权声明:程序员胖胖胖虎阿 发表于 2022年9月11日 上午4:08。
转载请注明:maven 05: 多模块管理 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...