MAVEN的继承详解

1.前言

我们先来看一个应用场景,使用maven将一个项目分给多个人并行开发,最终多人开发的多个工程整合成一个项目系统使用,这时就需要考虑不同开发人员在开发过程中使用的资源版本问题,一旦出现版本不兼容会造成测试成本过高,项目不能及时上线的严重问题.

2. 继承

2.1继承的意义

为了统一一个项目多模块并行开发的资源版本,maven出现了继承的功能,可以将一个大型项目分为父工程和子工程,其中父工程的唯一作用就是定义所有子模块工程的资源版本(父工程不编写代码,只编辑pom.xml文件)

上图中,还是2个模块开发者使用A.jar,由于继承了父工程,定义了A.jar的版本为1.0,所以子工程的A.jar不需要在添加版本的描述,直接就使用的是1.0版本的A.jar

3.2继承的实现

要想完成maven的继承我们应该按照以下几步执行

  • 创建父工程

保证父工程的pom.xml文件中定义的打包packaging标签的类型是pom,一个java项目默认是jar类型,web项目默认是war类型,但是父工程必须是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">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>

    <artifactId>maven-parent</artifactId>

    <version>1.0-SNAPSHOT</version>

    <packaging>pom</packaging>

</project>
 
  • 创建子工程

在子工程中使用parent标签,定义groupId artifactId version指向父工程.这样父工程的一些资源标签就可以被子工程使用了,父子继承的本质就是pom的重用复制。

 注意:由于idea每个项目单独使用一个workspace工作空间所以父工程想要被继承,需要先安装到本地库 install,要不然就在idea中使用聚合(idea的聚合)在父工程下直接创建child工程,这里我们选择第二种.

<?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">

    <parent>

        <artifactId>maven-parent</artifactId>

        <groupId>org.example</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven-child</artifactId>

</project>

3.3继承的内容

通过上述案例我们实现了一个父工程下有一个子工程继承的项目结构,那么子工程能从父工程继承哪些内容呢?

本质上来讲,父子继承,子工程就是继承了父工程pom文件的一些标签资源.

有三种实现,分别比对说明

1.properties:定义一些当前项目使用的变量名称,在子类中可以通过$获取直接使用(缺点就是变量名称可以自由命名,如果很多,就很乱,每次获取都要去父类中寻找名称)

2.dependencies:一个项目的依赖,可以被子工程继承,而且是子工程无论用的到用不到依赖资源都会继承(缺点:继承--强制不能去除)

3.depencencyManagement:这个标签的作用是管理依赖的版本,当你使用到其中的某些依赖时,才引入,且不需要添加版本号(一般选择此种)

 

  • properties

maven父级项目中可以使用properties定义一些当前项目使用的变量名称,例如:

<properties>

    <!--可以在properties定义标签值-->

    <spring.version>4.3.11.RELEASE</spring.version>

    <junit.version>4.12</junit.version>

</properties>

子工程由于继承了这些标签的内容,可以直接使用

<dependencies>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-beans</artifactId>

        <version>${spring.version}</version>

    </dependency>

</dependencies>
 

这种标签里的属性可以被子工程继承

  • dependencies 

一个项目的依赖,可以被子工程继承,而且是子工程无论用的到用不到依赖资源都会继承,虽然可以在父工程通过这种继承实现版本统一,但是显然不是最合理的.

父级工程定义依赖资源

<dependencies>

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>4.12</version>

    </dependency>

</dependencies>

子工程直接继承使用,虽然子工程没有直接添加这个依赖,但是会使用这个依赖

 如果使用dependencies实现版本统一,会造成大量子工程根本用不到的依赖也必须使用.

  • depencencyManagement

这个标签的作用是管理依赖的版本,当项目中使用dependencyManagement标签管理大量依赖时,并不会在项目中直接使用依赖.而是当你使用到其中的某些依赖时,不需要添加版本号.

这个标签用的最多的还是在父工程中实现依赖的版本管理,从而子工程不会强制使用这些依赖,只会继承依赖管理中的版本号,这样可以留给子工程选择的空间

例如:

父工程:在依赖管理中添加spring-beans依赖

<dependencyManagement>

    <dependencies>

        <dependency>

            <groupId>redis.clients</groupId>

            <artifactId>jedis</artifactId>

            <version>3.1.0</version>

        </dependency>

    </dependencies>

</dependencyManagement>
 

 

     子工程

     在依赖中只需要填写groupId artifactId,version直接继承自父工程

  

<dependencies>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-beans</artifactId>

    </dependency>

</dependencies>
 

     这样相当于父工程管理的4.3.11就限制了子工程版本的内容

这就是父子继承的maven结构,一旦某个工程继承了一个父工程,那么他就会从父工程中获取很多已经定义好的资源,尤其是版本.

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Maven权威指南 Authors Tim O'Brien (Sonatype, Inc.) , John Casey (Sonatype, Inc.) , Brian Fox (Sonatype, Inc.) , Bruce Snyder () , Jason Van Zyl (Sonatype, Inc.) , Juven Xu () Abstract Maven权威指南是一本关于Apache Maven的书。 Copyright 1. Creative Commons BY-ND-NC Foreword: Beta 0.16 Preface 1. How to Use this Book 2. Your Feedback 3. Font Conventions 4. Maven Writing Conventions 5. Acknowledgements 1. 介绍 Apache Maven 1.1. Maven... 它是什么? 1.2. 约定优于配置(Convention Over Configuration) 1.3. 一个一般的接口 1.4. 基于Maven插件的全局性重用 1.5. 一个“项目”的概念模型 1.6. Maven是Ant的另一种选择么? 1.7. 比较Maven和Ant 1.8. 总结 2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或OpenBSD上安装Maven 2.4. 验证Maven安装 2.5. Maven安装细节 2.5.1. 用户相关配置和仓库 2.5.2. 升级Maven 2.6. 获得Maven帮助 2.7. 使用Maven Help插件 2.7.1. 描述一个Maven插件 2.8. 关于Apache软件许可证 I. Maven实战 3. 一个简单的Maven项目 3.1. 简介 3.1.1. 下载本章的例子 3.2. 创建一个简单的项目 3.3. 构建一个简单的项目 3.4. 简单的项目对象模型 (Project Object Model) 3.5. 核心概念 3.5.1. Maven插件和目标 (Plugins and Goals) 3.5.2. Maven生命周期 (Lifecycle) 3.5.3. Maven坐标 (Coordinates) 3.5.4. Maven仓库(Repositories) 3.5.5. Maven依赖管理 (Dependency Management) 3.5.6. 站点生成和报告 (Site Generation and Reporting) 3.6. 小结 4. 定制一个Maven项目 4.1. 介绍 4.1.1. 下载本章样例 4.2. 定义Simple Weather项目 4.2.1. Yahoo! Weather RSS 4.3. 创建Simple Weather项目 4.4. 定制项目信息 4.5. 添加新的依赖 4.6. Simple Weather源码 4.7. 添加资源 4.8. 运行Simple Weather项目 4.8.1. Maven Exec 插件 4.8.2. 浏览你的项目依赖 4.9. 编写单元测试 4.10. 添加测试范围依赖 4.11. 添加单元测试资源 4.12. 执行单元测试 4.12.1. 忽略测试失败
好的,让我来为你介绍一下在 IDEA 最新版下如何使用 Maven 继承 Jetty。 首先,我们需要在父工程的 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.31.v20200723</version> </dependency> ``` 这个依赖会将 Jetty Maven 插件添加到项目中。 然后,在父工程的 pom.xml 文件中添加以下插件: ``` <build> <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.31.v20200723</version> <configuration> <webApp> <contextPath>/</contextPath> </webApp> <stopKey>stop</stopKey> <stopPort>8081</stopPort> <httpConnector> <port>8080</port> <idleTimeout>60000</idleTimeout> </httpConnector> </configuration> </plugin> </plugins> </build> ``` 这个插件会配置 Jetty 服务器的端口号为 8080,并且指定了停止服务器的端口号为 8081。 接下来,在子工程的 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>com.example</groupId> <artifactId>parent</artifactId> <version>1.0.0-SNAPSHOT</version> <type>pom</type> </dependency> ``` 这个依赖会将父工程中的 Jetty Maven 插件引入到子工程中。 最后,在子工程的 pom.xml 文件中执行以下命令启动 Jetty 服务器: ``` mvn jetty:run ``` 这个命令会启动 Jetty 服务器并且在浏览器中打开项目的首页。 以上就是在 IDEA 最新版下使用 Maven 继承 Jetty 的详细步骤。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值