maven基础特性

maven简介

maven是一款为java进行依赖管理等的工具,可以实现自动化打包、构建和发布,极大的提高了开发的效率。

一、maven的核心功能:构建管理和依赖管理

1.1 依赖管理和配置

依赖管理可以帮助开发人员可以轻松的将其他开发人员的模块或第三方框架集成到自己的应用程序或模块中,避免版本冲突和依赖丢失。

1.2 依赖的传递和冲突

1.2.1依赖传递

当模块A依赖模块B,而B模块又依赖模块C时,那么A就会间接的依赖模块C。这种依赖可以形成一个依赖树。

依赖传递的作用:

  1. 减少依赖重复:多个项目依赖同一个库,mave自动只下载一次该库。
  2. 自动管理依赖:简化依赖项的管理,是项目构建保持一致。
  3. 确保版本正确:通过传递,不会出现版本兼容性的问题。
1.2.2 依赖冲突

当同一个依赖出现不同的版本冲突时,例如:
A依赖B,B依赖C(Version 3.3.2 )
F依赖C(Version 2.3.2)
此时成为依赖冲突

依赖冲突解决:

  1. 短路优先原则(第一原则):
    A->B->C(Version 3.3.2)
    F->C(Version 2.3.2)
    此时C(Version 2.3.2)的路径更短,因此maven工程中会引入2.3.2版本。
  2. 依赖路径相同,采用"先声明优先"(第二原则):
    中,先声明的,路径相同,会优先选择。

1.3 构建管理和插件配置

项目构建指将源代码、依赖库和资源文件转换成可执行或可部署的应用程序的过程:
清理(clean)—>编译(compile)—>测试(test)—>报告(site)—>打包(package)—>部署(install(本地部署)和deploy(私服部署))。

1.3.1 构建命令周期
  1. 清理周期:对项目编译生成的文件进行清理
    包含命令:clean
  2. 默认周期:定义了真正构建时所需要的所有步骤。
    包含命令:compile —— test —— package —— install / deploy
  3. 报告周期:包含命令:site
1.3.2 使用方案

打包: mvn clean package
重新编译: mvn clean compile
本地部署: mvn clean install

执行命令时,会自动执行该周期内操作之前的所有操作,例如,test时会自动进行compile操作。

二、Maven继承和聚合特性

2.1 Maven工程继承关系

2.1.1 继承的概念

Maven继承是指另一个项目继承该项目的配置信息,多个项目共同配置信息,简化了项目的管理和维护工作。

2.1.2 继承的作用

父工程中统一对依赖进行管理,保证版本的统一。

  1. 背景:对一个比较大的项目进行模块的拆分,每个module都需要培植自己的依赖信息。
  2. 需求:多个模块需要使用同一个框架时,整个项目使用的框架版本统一管理。

父工程中为整个项目维护依赖信息的整合保证了项目的规范、以及jar包的准确性。

2.1.3 继承语法
  1. 父工程
<groupId>com.atguigu.maven</groupId>
<artifactId>pro03-maven-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom -->
<packaging>pom</packaging>

  1. 子工程
<!-- 使用parent标签指定当前工程的父工程 -->
<parent>
  <!-- 父工程的坐标 -->
  <groupId>com.atguigu.maven</groupId>
  <artifactId>pro03-maven-parent</artifactId>
  <version>1.0-SNAPSHOT</version>
</parent>

<!-- 子工程的坐标 -->
<!-- 如果子工程坐标中的groupId和version与父工程一致,那么可以省略 -->
<!-- <groupId>com.atguigu.maven</groupId> -->
<artifactId>pro04-maven-module</artifactId>
<!-- <version>1.0-SNAPSHOT</version> -->
2.1.4 父工程对依赖的统一管理
  1. 父工程声明版本
<!-- 使用dependencyManagement标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到工程 -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
  </dependencies>
</dependencyManagement>
  1. 子工程引用版本
<!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉。  -->
<!-- 把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 -->
<!-- 具体来说是由父工程的dependencyManagement来决定。 -->
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
  </dependency>
</dependencies>

2.2 Maven工程聚合关系

  1. 聚合:多个项目组织到一个父级项目中,同意按顺序出发子工程
  2. 好处
    (1)方便管理与维护
    (2)实现对多个项目顺序控制,避免出现依赖混乱
  3. 聚合语法
<project>
  <groupId>com.example</groupId>
  <artifactId>parent-project</artifactId>
  <packaging>pom</packaging>
  <version>1.0.0</version>
  <modules>
    <module>child-project1</module>
    <module>child-project2</module>
  </modules>
</project>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值