#yyds干货盘点#Maven认识与理解

Posted 俺想吃蜂蜜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#Maven认识与理解相关的知识,希望对你有一定的参考价值。

Maven是什么?

Maven是Apache下的一个开源项目,它是一个项目管理工具,它用于对java项目进行项目构建、依赖管理及项目信息管理。当前使用Maven的项目在持续增长。
Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

Maven概念模型

  • 项目对象模型 (Project Object Model)
    通过pom.xml定义项目的坐标、项目依赖、项目信息、插件目标等。
  • 依赖管理系统(Dependency Management System)
    通过定义项目所依赖组件的坐标由maven进行依赖管理。
    比如:项目依赖struts2.3.24,通过在pom.xml中定义依赖即可将struts2的jar包自动加入工程:
    pom.xml中定义依赖如下:
    <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.24</version>
    </dependency>

    一个项目生命周期

    一个软件开发人员每天都在完成项目的生命周期:清理、编译、测试、部署,有的手工完成,有的通过Ant(也是一个项目构建工具〉脚本自动完成,Maven将项目生命周期抽象统一为:清理、初始化、编译、测试、报告、打包、部署、站点生成等。

Maven的含义

翻译为“专家”,“内行”

Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。

什么是理想的项目构建?

高度自动化,跨平台,可重用的组件,标准化的

什么是依赖?为什么要进行依赖管理?

自动下载,统一依赖管理

有哪些项目信息?

项目名称描述等,开发人员信息,开发者信息等

为什么使用Maven?

IDE?Eclipse?

手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成
每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错

Ant?

没有一个约定的目录结构
必须明确让ant做什么,什么时候做,然后编译,打包
没有生命周期,必须定义目标及其实现的任务序列
没有集成依赖管理

Maven?

拥有约定,知道你的代码在哪里,放到哪里去
拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情
拥有依赖管理,仓库管理

Maven安装目录分析

bin:含有mvn运行的脚本

boot:含有plexus-classworlds类加载器框架

conf:含有settings.xml配置文件

lib:含有Maven运行时所需要的java类库

LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍

Maven坐标

什么是坐标?

  • 在平面几何中坐标(x,y)可以标识平面中唯一的点

Maven坐标主要组成(以下四个标识决定了Maven 的唯一性)

  • groupId:定义当前Maven项目隶属项目

  • artifactId:定义实际项目中的一个模块

  • version:定义当前项目的当前版本

  • packaging:定义该项目的打包方式

groupld : 定义当前Maven项目隶属的实际项目。首先,Maven项目和实际项目不一定是一对一的关系。比如SpringFrameWork这一实际项目,其对应的Maven项目会有很多,如spring-core,spring-context等。这是由于Maven中模块的概念,因此,一个实际项目往往会被划分成很多模块。其次,groupld不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目,如果groupld只定义到组织级别,而后面我们会看到,artfactid只能定义Maven项目(模块),那么实际项目这个层次将难以定义。最后,groupld的表示方式与Java包名的表达方式类似,通常与域名反向—一对应。

artifactld : 该元素定义当前实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactid的前缀。比如上例中的my-app.

version : 该元素定义Maven项目当前的版本

packaging : 定义Maven项目打包的方式,首先,打包方式通常与所生成构件的文件扩展名对应,如上例中的packaging为jar最终的文件名为my-app-0.0.1-SNAPSHOT.jar。也可以打包成war, ear等。当不packaging的时候,Maven会使用默认值jar

classifier :该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应,如上例中的主构件为my-app-0.0.1- SNAPSHOTjar,该项目可能还会通过一些插件生成如my-app-0.0.1-SNAPSHOT-javadoc.jar,my-app-0.0.1-SNAPSHOT-sources.jar,这样附属构件也就拥有了自己唯一的坐标

以上是关于#yyds干货盘点#Maven认识与理解的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#JavaScript之彻底理解原型与原型链

#yyds干货盘点#认识Golang中的数组类型

#yyds干货盘点# JavaSE系列Java类与对象,万物皆对象

#yyds干货盘点# HCIE-Security Day10:6个实验理解VRRP与可靠性

JVM | 第2部分:虚拟机执行子系统《深入理解 Java 虚拟机》 #yyds干货盘点#

#yyds干货盘点#JavaSE系列Java程序设计基础——数据类型变量与运算符