美文网首页
maven父子项目引用(继承和聚合)

maven父子项目引用(继承和聚合)

作者: 晓晓_1931 | 来源:发表于2022-12-19 17:11 被阅读0次

一、继承方式

分别创建三个项目fu、ca、cb。fu作为父项目,ca、cb、cp作为子项目

fu创建时打包方式为pom;
ca、cb创建时打包方式为jar;
cp创建时打包方式为war(主要看插件是否也跟着继承过来)

fu项目的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 
https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xx</groupId>
    <artifactId>fu</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging><!-- 打包方式为pom -->
    <!-- 统一管理子项目的jar包,用 <dependencyManagement> -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.3</version>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <build>
       <!-- 统一管理子项目的插件,用 <pluginManagement> -->
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.3.1</version> <!-- 需要带版本号 -->
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

ca项目的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 
https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.xx</groupId>
        <artifactId>fu</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!--本例中此处是可选的-->
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>ca</artifactId>

    <dependencies>
        <!-- 父项目用了 <dependencyManagement> 所以
        子项目这块需要手动引入一下相同的jar,但是不需要写版本号,写版本号就以子的本版为准-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId> 
            <!--此处不再需要verison了!-->
        </dependency>
        <dependency>
            <!--当然也可以加入只在这个子模块中用到的jar包-->
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-lgpl</artifactId>
            <version>1.9.4</version> 
        </dependency>
    </dependencies>
</project>

cb项目的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 
https://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <parent>
        <groupId>com.xx</groupId>
        <artifactId>fu</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!--本例中此处是可选的-->
    </parent>
    
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>cb</artifactId> 

    <dependencies>
        <dependency> 
            <groupId>com.xx</groupId>
            <artifactId>ca</artifactId> <!--加上ca的所有依赖,需要install项目ca-->
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

cp项目的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 
https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.xx</groupId>
        <artifactId>fu</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!--本例中此处是可选的-->
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>cp</artifactId>
    <packaging>war</packaging>
    <!-- 插件就不需要引入了 -->
</project>

二、聚合方式

分别创建三个项目fuproject、cap、cbp、cpp。fuproject作为父项目,cap、cbp、cpp作为子模块

fu创建时打包方式为pom;
cap、cbp创建时打包方式为jar;
cpp创建时打包方式为war(主要看插件是否也跟着继承过来)

fuproject项目的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 
https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xx</groupId>
    <artifactId>fuproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>cap</module>
        <module>cbp</module>
        <module>cpp</module>
    </modules>

    <dependencies>
        <dependency>
            <!--添加一个jar包依赖-->
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.1</version>
            </plugin>
        </plugins>
    </build>
</project>

cap项目的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 
https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <!-- 引入父坐标 -->
  <parent>
    <groupId>com.xx</groupId>
    <artifactId>fuproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <!-- 自己的坐标 -->
  <artifactId>cap</artifactId>
  <dependencies>
 <!--  
   <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>    
        <version>2.5</version>
   </dependency> 
 -->
   <!-- 父项没用 <dependencyManagement> 所以 子项目这块可以不写,但是也会被引入,
        如果写了,版本号以子项目的为主-->
   <dependency>
       <!--当然也可以加入只在这个子模块中用到的jar包-->
       <groupId>org.codehaus.jackson</groupId>
       <artifactId>jackson-core-lgpl</artifactId>
       <version>1.9.4</version>    
   </dependency>
  </dependencies>
</project>

cbp项目的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 
https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 引入父坐标 -->
    <parent>
        <groupId>com.xx</groupId>
        <artifactId>fuproject</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!-- 自己的坐标 -->
    <artifactId>cbp</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.xx</groupId>
            <artifactId>cap</artifactId> <!--加上cap的所有依赖,需要install项目cap-->
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

cpp项目的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 
https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
  <!-- 引入父坐标 -->
  <parent>
    <groupId>com.xx</groupId>
    <artifactId>fuproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <!-- 自己的坐标 -->
  <artifactId>cpp</artifactId>
  <packaging>war</packaging>
  <!-- 插件就不需要引入了 -->
</project>

注意:

1、无论继承还是聚合

如果父pom中使用的是
<dependencies>....</dependencies>
的方式,则子pom会自动使用pom中的jar包;

如果父pom使用
<dependencyManagement>
<dependencies>....</dependencies>
</dependencyManagement>
方式,则子pom不会自动使用父pom中的jar包,这时如果子pom想使用的话,就要给出groupId和artifactId,无需给出version

2、"聚合"在读取父的pom文件时去找到子项目的pom,但还是会分别去编译他们引入的依赖。这样就会导致pom文件引入的包重复!!于是我们引入了"继承"的概念,也就是形成"父子"关系,子pom可以引用到父pom中引入的依赖。

相关文章

  • Maven学习(四) Maven 聚合 继承 单继承

    Maven学习(四) Maven 聚合 继承 单继承 聚合 Maven聚合:一个Maven项目,用来管理它的mav...

  • Java工程搭建方案 - Maven

    本篇讲讲Maven在实际项目中的应用,包含 Maven继承和聚合 微服务项目划分 Maven仓库配置和顺序 Mav...

  • 3年java开发面试BAT,你必须彻底搞定Maven!

    前言 现在的Java项目中,Maven随处可见。 Maven的仓库管理、依赖管理、继承和聚合等特性为项目的构建提供...

  • maven 继承和聚合

    目录 聚合1.1 为啥需要分模块开发?1.2 为啥需要聚合?1.3 如何使用聚合?1.4 实际方案(方案一...

  • Maven 聚合和继承

    Maven 聚合 该pom文件作为其他pom的容器运行,在pom文件的modules标签中引入我们想要聚合的各个模...

  • Maven核心知识

    前言 Java领域,可以说Maven随处可见。Maven的仓库管理、依赖管理、继承和聚合等特性为项目的构建提供了一...

  • 聚合与继承

    基本概念 Maven的聚合特性能够把项目的各个模块聚合在一起构建,而Maven的继承特性则能帮助抽取各模块相同的依...

  • (IX)Maven聚合和继承

    概述:当前软件设计人员会对软件划分模块,以得到更清晰的设计及更高的重用性。简单来说,Maven的聚合特性就是将项目...

  • maven的聚合和继承

    maven的聚合 有三个项目,我们分了三个模块编译:user-core user-log user-service...

  • maven聚合和继承(8)

    聚合(模块开发): 一个项目可能用多个模块组成 聚合只需要一次运行就可以构件完成 1.新建父模块 第一个要勾选 p...

网友评论

      本文标题:maven父子项目引用(继承和聚合)

      本文链接:https://www.haomeiwen.com/subject/fiiyqdtx.html