#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干货盘点# JavaSE系列Java类与对象,万物皆对象
#yyds干货盘点# HCIE-Security Day10:6个实验理解VRRP与可靠性