Maven

发布时间:2023年12月29日

Maven



一、Maven简介?

Maven 是一款为 Java 项目构建管理、依赖管理的工具,使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.

二、Maven主要作用

1.依赖导入

通过配置maven工程的pom文件,可以将我们项目需要第三方库(依赖),如Druid连接池、MySQL数据库驱动等下载到我们的项目中来

2.依赖管理

Maven 可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有冲突、依赖版本管理等。通过 Maven,我们可以方便地维护项目所依赖的外部库,而我们仅仅需要编写配置即可。

3.项目构建

Maven 可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有冲突、依赖版本管理等。通过 Maven,我们可以方便地维护项目所依赖的外部库,而我们仅仅需要编写配置即可。

三,Maven工程介绍

1.GAVP属性

GAVP是指GroupId、ArtifactId、Version、Packaging等四个属性,其中前三个是必要的,这四个属性主要用于在Maven仓库中为每个项目做一个标识,方便后期项目之间相互引用依赖等。
1:GroupId:格式为com.{公司/BU}.业务线.[子业务线],最多4级。例如:com.taobao.tdd。
2:ArtifactId:格式为产品线名-模块名。语义不重复不遗漏,先到仓库中心去查证一下。例如:tc-client
3:Version:版本号,格式推荐为主版本号.次版本号.修订号。例如:初始→1.0.0,调整模块2.0.0,修bug→1.0.1,功能调整→1.1.0等。
4:Packaging:指示将项目打包为什么类型的文件,idea根据packaging值,识别maven项目类型。

  • packaging属性为jar,代表普通的Java工程,打包以后是.jar结尾的文件。
  • packaging属性为war,代表Java的web工程,打包以后是.war结尾的文件。
  • packaging属性为pom表示这是一个聚合项目,这意味着这个项目不包含Java代码或资源,只是为了聚合其他子模块或工程而存在的。
    <groupId>com.zjr</groupId>
    <artifactId>maven_parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

2,Maven项目结构

在这里插入图片描述

  • pom.xml:Maven 项目管理文件,用于描述项目的依赖和构建配置等信息。
  • src/main/java:存放项目的 Java 源代码。
  • src/main/resources:存放项目的资源文件,如配置文件、静态资源等。
  • src/main/webapp/WEB-INF:存放 Web 应用的配置文件。
  • src/main/webapp/index.html:Web 应用的入口页面。
  • src/test/java:存放项目的测试代码。
  • src/test/resources:存放测试相关的资源文件,如测试配置文件等。

三、Maven核心功能依赖和构建管理

1,Maven依赖管理

在pom文件下可以的标签下配置需要导入的依赖,可以通过里面定义属性的方式去同意控制版本(作用类似与C语言中define的参数,只是进行字符替换)

  <properties>
    <!-- 定义了版本信息,放在名为jackson.version的属性中-->
    <jackson.verson>2.16.0</jackson.verson>
  </properties>

  <dependencies>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <!-- 使用定义的Jackson.version属性-->
      <version>${jackson.verson}</version>
    </dependency>
  </dependencies>
</project>

2,项目构建

Maven提供了一套标准化的构建流程,包括编译、测试、打包、发布等,使用简单的命令就能完成项目的构建。
1:自动化构建:Maven能够自动化构建项目,通过定义好的生命周期和插件,自动完成项目的编译、测试、打包、部署等过程,减少了手动操作。
2:丰富的插件支持:Maven有丰富的插件支持,可以方便地扩展和定制构建过程,满足不同的构建需求。
版本管理:Maven能够方便地管理项目的版本,通过版本号的管理,可以方便地跟踪和回溯项目的历史版本。

  • Maven命令的生命周期是指通过执行Maven命令来触发相应的构建阶段。Maven构建过程中会按照预设的阶段顺序执行,每个阶段都会调用相应的插件来完成特定的任务。
    清理阶段:执行pre-clean和clean阶段,清理上一次构建生成的文件。
    编译阶段:执行compile阶段,编译项目的源代码。
    测试阶段:执行test阶段,使用合适的单元测试框架来测试已编译的源代码。
    打包阶段:执行package阶段,将编译好的代码打包成可发布的格式。
    部署阶段:执行install阶段,将打包好的项目安装到本地仓库,供其他项目引用。
    除了上述的生命周期,Maven还提供了其他命令来执行特定的构建阶段,如mvn test只执行测试阶段,mvn package只执行编译、测试和打包阶段等。这些命令可以根据实际需要灵活使用,以便快速构建或跳过某些不必要的阶段。

四,Maven继承聚合特性

1 ,Maven工程继承关系

Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。注意父工程打包方式为pom,子工程要用来指定所继承的父工程,优点如下

  • 统一管理依赖,子工程的可以继承父工程的依赖,或是父工程声明的依赖,保证了整个项目规范、准确使用 jar 包

父工程配置如下

<!-- 聚合,对项目构建简化,并且优化构建顺序-->
    <!-- 一般构建和聚合同时存在,但是若不想子模块被父工程统一构建可不用配置-->
    <modules>
        <!-- 统一构建管理的两个子工程-->
        <module>sonA</module>
        <module>sonB</module>
    </modules>

    <!-- 使用dependencyManagement标签配置对依赖的管理 -->
    <!-- 被管理的依赖并没有真正被引入到工程(该工程并没有导入一下依赖,而是对子工程依赖的规范化) -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <!-- 版本使用引用值-->
                <version>${springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>4.0.0.RELEASE</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

子工程如下

 <!-- 使用parent标签指定当前工程的父工程 -->
    <parent>
        <!-- 父工程的坐标 -->
        <groupId>com.zjr</groupId>
        <artifactId>maven_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <!-- 子工程的坐标 -->
    <!-- 如果子工程坐标中的groupId和version与父工程一致,那么可以省略 -->
    <!-- <groupId>com.atguigu.maven</groupId> -->
    <artifactId>sonA</artifactId>

    <!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉,由父工程决定。-->
    <!-- 若本工程重新规定版本号,则父工程版本被覆盖。-->
    <!-- 具体来说是由父工程的dependencyManagement来决定。 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
    </dependencies>

2,Mevan工程聚合

  1. 聚合概念
    Maven 聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程构建的过程。
  2. 聚合作用
    1. 统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
    2. 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。
  3. 一般来说构建了继承关系maven就会在父工程中自动添加聚合关系,但是要明白,若有一个模块不需要随着父工程一起被构建,是可以在父工程中去掉聚合配置的。
   <!-- 聚合,对项目构建简化,并且优化构建顺序-->
    <!-- 一般构建和聚合同时存在,但是若不想子模块被父工程统一构建可不用配置-->
    <modules>
        <!-- 统一构建管理的两个子工程-->
        <module>sonA</module>
        <module>sonB</module>
    </modules>

总结

此文章参考了wolai

文章来源:https://blog.csdn.net/weixin_52548565/article/details/135288502
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。