Maven中子模块继承父模块的两种方式

方式1

在子模块中指定父模块的相对路径,往下是案例,在往下是实现方式。

案例如下:

父模块pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!--maven版本号-->
    <modelVersion>4.0.0</modelVersion>

    <!--父工程的GAV坐标-->
    <groupId>com.bjpowernode.p2p</groupId>
    <artifactId>p2p-parent</artifactId>
    <version>1.0.0</version>

    <!--添加打包方式为pom,代表该工程就是父工程-->
    <packaging>pom</packaging>

    <!--管理依赖的版本号-->
    <properties>
        <spring-version>4.3.9.RELEASE</spring-version>
        ………………………………………………
        ………………………………………………
        ………………………………………………
    </properties>

    <!--管理依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring-version}</version>
            </dependency>
            ………………………………………………
            ………………………………………………
            ………………………………………………

        </dependencies>
    </dependencyManagement>

</project>
子模块pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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">
	<!--主要工作开始-->
	
    <!--继承父级pom文件-->
    <parent>
        <groupId>com.bjpowernode.p2p</groupId>
        <artifactId>p2p-parent</artifactId>
        <version>1.0.0</version>
        <!--父级pom文件的相对路径-->
        <relativePath>../p2p-parent/pom.xml</relativePath>
    </parent>
    
	<!--子模块的项目名称,groupId和version使用的是父模块的-->
    <artifactId>p2p-web</artifactId>
    
	<!--主要工作结束-->
    
    <modelVersion>4.0.0</modelVersion>
    
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        ………………………………………………
        ………………………………………………
        ………………………………………………
    </dependencies>
    
</project>

在IDEA中你可以这样做(Eclipse了解的不深入,以后知道了在补充)

在IDEA中新建模块的时候别在父模块上面点击新建,而是在空白的地方新建模块,然后在配置的时候指定父模块就可以了,如下所示:
在这里插入图片描述
当然你要想在父模块上面点击新建也是可以的,不过需要把Add as module to设置成None,如下所示:
在这里插入图片描述

方式2(推荐)

不在子模块中指定父模块的相对路径,而是在父模块的pom.xml使用model标签去包裹子模块,往下是案例,再往下是实现方式。

案例如下:

父模块pom文件
<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.atguigu.springcloud</groupId>
	<artifactId>microservicecloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	
	<packaging>pom</packaging>

	<dependencyManagement>
		<dependencies>
		  
			<dependency>
			    <groupId>mysql</groupId>
			    <artifactId>mysql-connector-java</artifactId>
			    <version>5.1.46</version>
			</dependency>
			………………………………………………
	        ………………………………………………
	        ………………………………………………
		</dependencies>
	</dependencyManagement>
	
	<!--重点开始-->
	<!--父模块所包含的子模块-->
	<modules>
		<!--module标签中写的是子模块的项目工程名-->
		<module>microservicecloud-api</module>
		<module>microservicecloud-eureka-7001</module>
		<module>microservicecloud-eureka-7002</module>
		<module>microservicecloud-eureka-7003</module>
		………………………………………………
        ………………………………………………
        ………………………………………………
	</modules>
	<!--重点结束-->
</project>
子模块pom文件
<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>
    	<!-- 父模块的GAV坐标 -->
        <groupId>com.atguigu.springcloud</groupId>
        <artifactId>microservicecloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    
    <!-- 子模块的名称 -->
    <artifactId>microservicecloud-api</artifactId>
    
	<!-- 重点结束 -->
	
    <dependencies>
        
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
        
    </dependencies>
</project>
在IDEA和Eclipse中你都可以这样做

在父模块上面点击鼠标右键去新建模块,然后就实现了方式2,在IDEA中如下:
在这里插入图片描述在这里插入图片描述

拓展说明

  1. modules中的module标签顺序,随意放置就好,不用按照子模块依赖顺序来设置,maven会自动按照依赖顺序为你打包
  2. modules中的module标签作用:modules只能在模块的打包方式是pom的时候才能使用,比如<packaging>pom</packaging>,modeule标签中的名称是其他模块artifactId名称,无论该模块是否打包方式为pom模块的子模块,都是可以的;在对父模块进行mvn clean install的时候,所有在module标签中的模块都会自动按照模块之间的依赖顺序进行mvn clean install
  3. 当我们从maven私服中下载子模块jar包的时候,该子模块jar包会去寻找用到的父模块jar包,主要目的是确定用到依赖的版本,所以我们把子模块jar包发布到maven仓库的时候,也一定要同步把父模块jar包发布到maven仓库,这样在下载子模块的时候才不会报错
  4. 发布打包方式为pom的父模块到maven仓库的时候,我们可以删除父模块的module标签吗,我认为是可以的,因为module标签的作用在上面2中已经说明了,所以它只和打包方式为pom的模块进行mvn clean install的时候有关,也就是说只和开发的时候mvn clean install有关,和其他的地方没啥关系
  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值