Maven学习笔记

注:本文章只记录maven的相关概念,不包含maven的安装、搭建和使用过程

Maven的作用

Maven是面向技术层面,针对java开发的项目管理工具,它提供了构建工具所提供的功能,除了构建功能外,maven还可以管理项目结构、管理依赖关系、生成报告、生成web站点、有助于团队成员之间的协作。

特点

  • 1.能够结局项目依赖管理难题
  • 2.轻易解决构建和按惯例各种项目
  • 3.提供中央仓库维护jar包
  • 4.管理项目整个生命周期

项目构建

项目构建过程包括【清理】->【编译】->【测试】->【生成测试报告】->【打包】->【部署】,这六个步骤就是一个项目的完整构建过程。

  • Clean:删除上一次编译得到的class字节码文件。
  • Compile:将Java源程序编译文class字节码文件。
  • Test:运行一起拿准备好的测试程序,验证代码是否正确。
  • Package:Java工程打jar包,web工程打war包。
  • 部署:安装install将jar包或war包存入maven仓库 deploy:将war包部署到服务器运行。

依赖管理

依赖管理是维护两个模块之间依赖关系的操作。依赖管理是maven的核心特征之一,在多模块的项目,模块间的依赖关系就变得非常复杂,管理很困难。Maven针对此情形,提供了一种高度控制的方法。
实现:在maven中,只需要通过声明配置,即可实现依赖管理操作。
Maven配置文件采用xml方式进行配置,仅需要通过标签进行声明,即可实现依赖关系的维护。
约定配置:maven提倡使用一个共同的标准目录结构,maven使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。
注:Maven3.3以上版本,需要jdk1.7以上支持。
依赖管理主要通过groupId-artifactId-version三个属性来导入。

Maven仓库

在maven的术语中,仓库死一个位置(place),在磁盘中对应一个目录。
Maven仓库中存放了项目所有的依赖(jar包),这个库所在的位置叫做仓库。
在maven中任何一个依赖(jar包),插件(plugin)或者项目构建的输出(项目打成的包),都可以称之为构件。
Maven仓库能够帮助我们管理构建(主要是jar包),存放了所有jar,war,pom的地方。

类型

本地(local):本地存放构建(主要是jar包)的目录,第一次安装会被创建,可以通过配置修改。(默认c盘.m2目录下)
中央(central):由maven社区提供的仓库,包含了大量常用的库,不需要配置,需要通过网络才能访问。
远程(remote):如果maven在构建过程中,在本地,中央仓库找不到依赖jar包,就会报错。此时,maven提供了远程仓库的概念,它是开发人员自己定制的仓库,包含了所有能用到的jar包,本地找不到,则访问远程仓库获取。

Maven安装目录介绍

  • bin:存放maven运行的脚本。
  • boot:存放maven的类加载器。
  • conf:存放maven的配置文件,主要关注settings.xml。
  • lib:存放maven运行时所需的类库。
  • repository:用户单独创建的本地仓库目录,用来存放jar包。

Maven项目的标准结构

  • src/main/java 存放主程序源代码
  • src/main/resources 存放主程序配置文件
  • src/main/webapp 存放web应用程序资源(WEB-INF、前端资源、JSP)
  • src/test/java 存放测试程序源代码
  • src/test/resources 存放测试程序配置文件
  • pom.xml 存放在顶层目录中,是项目配置的核心

Pom.xml相关标签说明

  • modelVersion:使用pom对象模板的版本,一般就写4.0.0。
  • groupId:组ID,一般是一个公司、组织的域名反写。
  • artifactId:项目名
  • version:版本号
  • packaging:打包方式:pom(聚合)、jar(Java工程)、war(web工程)
  • name:项目的显示名,常用于maven生成的文档。可以和artifactId不一致。
  • description:项目描述,常用于maven生成的文档。
  • groupId-artifactId-version:项目坐标这三个组合在一起可以唯一锁定项目在仓库中的位置。
  • 如果要寻找一个项目在本地仓库中的位置,先要获得其项目坐标,格式:仓库/groupId/artifactId/version/项目包(jar\war)

搜索依赖jar包

Maven仓库:https://mvnrepository.com/
阿里云镜像:https://maven.aliyun.com/mvn/search

依赖冲突问题

依赖冲突是指,当前项目依赖的A、B两个依赖,同时依赖了C,但是依赖C的版本不一致,就可能导致jar包冲突。
解决方法:

  • 直接依赖:所有间接依赖全部改为直接依赖(太累)
  • 锁定版本:在两个依赖方中的一方,锁定冲突的依赖(可能引起jar包兼容问题)
  • 排除版本:在两个依赖方中的一方,排除掉冲突的依赖(可能引起jar包兼容问题)
  • 统一版本,避免冲突,可以在父工程中统一定义依赖版本。(建议统一选择高版本)

聚合工程

聚合工程是能够实现多模块统一管理、模块工作统一进行的maven工程。

  • 创建maven工程时,聚合工程的类型为pom类型。
  • 聚合工程为父工程,多个模块为子工程,一个父工程管理多个子工程。
  • 子工程继承父工程,能够复用父工程中定义的部分配置。

聚合工程的作用

  • 能够实现快速构建项目。
  • 解决多模块jar包版本不一致问题。
  • 统一对多个子模块进行操作。

如何创建聚合工程

  • 创建一个父工程,类型为pom。
  • 创建多个子工程,类型为jar或war,创建时指定父工程的GAV属性。
  • 父工程的pom文件中,通过modules标签维护与多个子工程的关系。
  • 子工程中,通过parent标签维护与父工程的关系。
  • 可以在父工程中通过properties标签定义统一的依赖版本号,对版本号集中管理。
  • 在父工程中,可以通过dependencyManagement标签,对依赖部件集中管理,方便子工程的复用。此操作并不是立即导入依赖,而是定义依赖部件管理,方便子工程中引用。
  • 在子工程中,可以引用父工程中dependencyManagement标签中预先定义过的依赖,但不需要指定版本号,因为父工程中已经集中管理的版本号,这也是解决各模块间jar包版本不一致的重要手段。
  • 在子工程中,引用的父工程中管理的依赖,如果不想要父工程中定义的版本,也可以编写version标签覆盖版本号。

更多文章

你可能感兴趣的:(Maven,笔记,maven)