Maven概述
Apache Maven的定义:Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model,pom),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
约定优于配置:系统、类库、框架应该假定合理的默认值,而非要求提供不必要的配置。
Maven是包含了一组关于软件项目和软件开发的语义规则的平台。这个基于每一个项目定义的模型实现了如下特征:
依赖管理
由于项目是根据一个包含组标识符,构件标识符和版本的唯一的坐标定义的。项目间可以使用这些坐标来声明依赖。
远程仓库
和项目依赖相关,使用定义在项目对象模型(POM)中的坐标来创建Maven构件的仓库
全局性构建逻辑重用
插件被编写成和项目模型对象一起工作,他们没有被设计成操作某一个已知位置的特定文件。一切都被抽象到模型中,插件配置和自定义行为都在模型中进行。
工具可移植性/集成
Maven标准化了POM信息。
便于搜索和过滤构件
像nexus这样的工具允许你使用存储在POM中给的信息对仓库中的内容进行索引和搜索
Maven安装目录
bin ----包含了mvn运行的脚本。这些脚本用来配置Java命令,准备好classpath和相关的java系统属性,然后执行java命令。
boot ----该目录只包含一个文件。以maven3.0为例,该文件为plexus-classworlds-2.2.3.jar。plexus-classworlds是一个类加载器框架。Maven使用该框架加载自己的类库
conf ----包含settings.xml。
lib ----包含了maven运行时需要的java类库。
LISENSE.txt ----Maven使用的软件许可证
NOTICE.txt ----Maven包含的第三方软件
README.txt ----Maven的简单介绍
Apache Ant和 Apache Maven的区别
Ant
没有正式的约定。那你必须明确的告诉Ant去哪里找源码,输出放在哪里
程序化,必须明确的告诉Ant做什么,什么时候做。
没有声明周期。必须定义目标和目标之间的依赖,必须手工为每个目标附上一个任务序列
Maven
拥有约定
声明式。只需创建一个pom.xml。Maven会帮助你处理其他的事情
有一个生命周期。当你运行mvn install的时候被调用。
mvn archetype:create -DgroupId=com.xx.xx -DartifactId=test -DpackageName=com.xx.xx
archetype:create称为一个Maven目标。archetype被定义为一个原始的模型或类型,在他之后其他类似的东西与之匹配。
groupId,artifactId,packaging,version是Maven的坐标,它们唯一标识了一个项目。name和url是pom提供的描述性元素。他们给人提供了可阅读的名字,讲一个项目关联到项目web站点。dependencies元素定义了依赖。
一个Maven插件是一个单个或多个目标的集合。一个目标是一个明确的任务,他可以作为单独的目标运行,或者作为一个大的构建的一部分和其他目标一起运行。一个目标是maven中的一个工作单元。目标通过配置属性来进行配置,以用来定制行为。
目标定义了一些参数,这些参数可以定义一些明智的默认值。create目标的约定,是创建一个简单的项目,叫做Quickstart。create目标定义了一个配置属性archetypeArtifactId,它有一个默认值为maven-archetype-quickstart。Quickstart archetype生成了一个最小项目的驱壳,包括一个POM和一个类。
Jar插件包含了一组创建Jar文件的目标。
Compiler插件包含一组编译源代码和测试代码的目标。
Surefire插件包含一组运行单元测试和生成测试报告的目标。
通过保持Compiler插件和Maven核心分离,并且提供更新机制,用户很容易能使用编译器的最新版本。通过这种方式,Maven插件提供了通用构建逻辑的全局重用性。
生命周期是包含在一个项目构建中的一系列有序的阶段。Maven可以支持许多不同的生命周期,但是最常用的生命周期是默认的Maven生命周期,这个生命周期中一开始的一个阶段是验证项目的基本完整性,最后一个阶段是把一个项目发布成产品。生命周期单独的定义为验证、测试、发布。
基本生命周期:
phases
process-resource -> compile -> process-classes -> process-test-resources -> test-compile -> test -> prepare-package -> package
goals
resources:resources -> compiler:compile -> resources:testResources -> compiler:testCompiler -> surefire:test -> jar:jar
Maven执行一个阶段的时候,他首先会有序的执行前面的所有阶段,到命令行指定的那个阶段为止。每个阶段对应了零个或多个目标。
当Maven经过以package为结尾的默认生命周期的时候,下面的目标按顺序被执行
resources:resources
Resources插件的resources目标绑定到了resources阶段。这个目标复制src/main/resources下的所有资源和其他任何配置的资源目录,到输出目录。
compiler:compile
Compiler插件的compile目标绑定到了compile阶段。这个目标编译src/main/java下的所有源代码和其他任何配置的资源目录,到输出目录。
resources:testResources
Resources插件的testResource目标绑定到了test-resources阶段。这个目标复制src/test/resources下的所有资源和其他任何的配置的测试资源目录,到测试输出目录。
compiler:testCompile
Compiler插件的testCompile目标绑定到了test-compile阶段。这个目标编译src/test/java下的测试用例和其他任何的配置的测试资源目录,到测试输出目录。
compiler:testCompile
Compiler插件testCompile目标绑定到了test-compile阶段。这个目标编译src/test/java下的测试用例和其他任何的配置测试资源目录,到测试输出目录。
surefire:test
Surefire插件的test目标绑定到了test阶段。这个目标运行所有的测试并且创建那些捕获详细测试结果的输出文件。默认情况下,如果测试有失败,这个目标会终止。
jar:jar
Jar插件的jar目标绑定到了package阶段。这个目标把输出目录打包成JAR文件。
Archetype插件通过名字为pom.xml文件创建了一个项目。这就是项目对象模型,一个项目的声明式描述。当Maven运行一个目标的时候,每个目标都会访问定义在项目POM里的信息。当jar:jar目标需要创建一个JAR文件的时候,他通过观察POM来找出这个JAR文件的名字。当compiler:compile任务编译Java源代码为字节码的时候,他通过观察POM来看是否有编译目标的参数。目标在POM的上下文中运行。目标是我们希望针对项目运行的动作,而项目是通过POM定义的。POM为项目命名,提供了项目的一组唯一标识符,并且通过依赖(dependencies),父(parents)和先决条件(prerequisite)来定义和其他项目的关系。POM也可以自定义插件的行为,提供项目相关的社区和开发人员的信息。
Maven坐标定义了一组标识,他们可以用来唯一标识一个项目、一个依赖或者Maven POM里的一个插件。groupId,articfactedId,version和packaging这些组合的标识符拼成了一个项目的坐标。一个Maven坐标是一个地址,即空间中的某个点:从一般到特殊。当一个项目通过依赖,插件或府项目引用和另外一个项目关联的时候,Maven通过坐标来精确定位一个项目
groupId:团体标识的约定是以创建这个项目组织名称的逆向域名开头
artifactId:在groupId下表示一个单独项目的唯一标识符
version:一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。而正在开发中的项目可以用一个特殊的标识:SNAPSHOT。
packaging:项目的类型,默认是jar,描述了项目打包后的输出。
Repository
在Maven中,构件和插件是在他们被需要的时候从远程的仓库取来的。Maven自带了一个用来下载Maven核心插件和依赖的远程仓库地址(http://repol.maven.org/maven2)。
Maven仓库是通过结构来定义的,一个Maven仓库是项目构件的一个集合,这些构件存储在一个目录结构下面,他们的格式能很容易被Maven所理解。Maven仓库的标准是按照下面的目录格式来存储构件的,相对于仓库的根目录:
/groupId/artifactId/version/artifactId-version.packaging
Maven从远程仓库下载构件和插件到你本机上,存储在你的本地Maven仓库里,一旦Maven已经从远程仓库下载了一个构件,他将不需要再被下载。Maven会现在本地仓库查找插件。
Dependencies
一个复杂的项目将会包含很多依赖,也有可能包含依赖于其它构件的依赖。Maven支持了传递性依赖。Maven会隐式的把这些库间接依赖的库也加入到你的项目中。Maven也会处理这些依赖中的冲突,同时能让你自定义默认行为,或排除一些特定的传递性依赖。
在Maven中一个依赖不仅仅是一个JAR。他是一个POM文件,这个POM可能也声明了对其他构件的依赖,这些依赖的依赖叫做传递性依赖,Maven仓库不仅仅存贮二进制文件,也存储了这些构件的元数据,才使传递性依赖成为了可能。
Maven提供了不同的依赖范围(dependency scope)。当为项目创建一个Jar文件的时候,他的依赖不会被捆绑在生成的构件中,他们只是用来编译。当用Maven来创建War或Ear,可以使用provided范围,它排除WAR文件中特定的依赖。provided范围告诉Maven一个依赖在编译的时候需要,但是他不应该被捆绑在构建的输出中。
Site Generation and Reporting
Maven可以生成文档和报告。
mvn site只关心处理在src/site目录下的site内容,还有生成报告。他会在target/site目录下看到一个项目web站点。
Maven概述的更多相关文章
- Java入门到精通——工具篇之Maven概述
为接手gxpt准备已经快一个月了从SSH2-->EJB-->环境搭建-->Maven的构建.下面就带领大家初始Maven 一.什么是Maven. Maven是一个垮平台的项目管理工具 ...
- Maven详解(一)------ Maven概述
1.引言 你能搜到这个教程,说明你对 Maven 感兴趣,但是又不是太理解.那么接下来这个系列的教程将会详细讲解 Maven 的用法,相信你看完之后,一定能对 Maven 的理解更进一步! 2.常规项 ...
- Maven概述(一)
Maven是什么? Apache Maven is a software project management and comprehension tool. Based on the concept ...
- Maven实战读书笔记(一):Maven概述
1.1 Maven是什么,能做什么 Maven是一个跨平台的项目管理工具,主要服务于Java平台的项目构建.依赖管理和项目信息管理. Maven的用途之一是项目构建,能够自动化构建过程,从清理.编译. ...
- 【Java EE 学习 82 上】【MAVEN基本安装和使用方法】
一.Maven概述 1.什么是Maven? Maven中文意思是"行家"."专家",它是一种跨平台的项目管理工具. 2.Maven有什么作用? Maven能够实 ...
- 使用maven来管理java项目
初学maven,简单总结一下学习心得,若有不对的地方,欢迎各位大神给我指正~ 总结分为6个部分 maven概述 maven安装 maven项目结构和创建方法 maven配置文件settings.xml ...
- Maven Myeclipse 搭建项目
一.maven概述 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具! 简单说Maven 是一个项目管理和构建自动化工具 二.环境搭建 1. ...
- Maven(一)初识Maven
前言 在这之前一直都有去看关于Maven的相关介绍,但是没有到真正要用的时候,自己总是以为懂了.其实真的感觉Maven并没有想象的那么简单! 那我们该怎么去学习maven呢?接下来我将从: 初步认识m ...
- maven基本基础知识及命令学习-1
Maven概述:Maven是很有效的项目管理工具,maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目构建.报告和文档的软件项目管理工具.统一管理环境,架包等. 一 maven下载 ...
随机推荐
- 微信JS SDK PHP Demo
一.JSSDK类定义 <?php class JSSDK { private $appId; private $appSecret; public function __construct($a ...
- 【设计模式】常用de单例模式
> 单例模式 单例模式,是常见的设计模式之一,一般来说,是程序员较早接触的模式之一.嘻嘻,包括我~~~ > 分类 一般来说,分两种: 饿汉模式.非常饿嘛,一上来就加载了,所以,就是非延迟加 ...
- [问题2014S10] 复旦高等代数II(13级)每周一题(第十教学周)
[问题2014S10] 设 \(A,B\) 为 \(n\) 阶方阵, 证明: \(AB\) 与 \(BA\) 相似的充分必要条件是 \[\mathrm{rank}\big((AB)^i\big)=\ ...
- 用excel绘制基因芯片热力图
1. 首先我们通过一些方法得到了如下的数据,基于篇幅以及为了教学隐去了其他一些信息. 2. 选中表达数据,执行 开始—条件格式—色阶 选择一个合适的色阶: 3. 选择好颜色之后得到了如下结果:
- WCF 4.0 进阶系列 -- 随笔汇总
WCF4.0 进阶系列–前言 WCF4.0 进阶系列--第一章 WCF简介 WCF4.0进阶系列--第二章 寄宿WCF服务 WCF4.0进阶系列--第三章 构建健壮的程序和服务 WCF4.0进阶系列- ...
- HDU-4528 小明系列故事——捉迷藏 BFS模拟
题意:链接 分析:每一个D或者是E点往四面延伸,并且赋一个特殊的值,能看到D点的点赋值为1,能看到E点的点赋值为1000,这是因为最多100步,因此最后可以根据除以1000和对1000取模来得出某个状 ...
- VPN推荐
最近ZF加强了对谷歌的屏蔽,推荐一些VPN azuressh.com ¥10/m http://www.archsocks.com/ ¥12/年 豆荚VPN,免费800M/月,偶尔连不上,可付费
- VM安装mac及dmg文件转换iso
今天心血来潮,突然看见一篇关于swift的入门教程,但是前提是有一台mac啊,于是对于屌丝,就只好装黑苹果或者是虚拟机上运行了,但是呢mac貌似听说(没用过)只能在inter上运行,屌丝的本子偏偏是A ...
- stm32cube--通用定时器--输入捕获
用定时器输入捕获做红外线接收实验.(此次试验以通道2为例) ①stm32cube配置 ② ③ ④程序中主要用到的输入捕获相关寄存器 uint16_t tim_sr,tim_ccer,tim_ccr; ...
- dataserver test code
main.go package main import ( "database/sql" "fmt" "log" "net/htt ...