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下载 ...
随机推荐
- Codeforce 567D
One-Dimensional Battle Ships time limit per test 1 second memory limit per test 256 megabytes input ...
- mys.cnf-性能优化
MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = socket = /data//mysql.sock [mysql] no-auto-rehash [mys ...
- 什么是 Help Desk?
科技如何帮助公司发展,关键就在于保证IT系统的安全稳定运行.我们都知道要保证系统100%可用非常难实现,那么如何在系统故障时减少处置时间?一个有效的办法就是帮助台(Help Desk).那么什么是帮助 ...
- IE7下总提示" 缺少标识符、字符串或数字"
用Jquery easyUI ,IE7下列表显示不了,总提示缺少标识符.字符串或数字.而google,maxthon,firefox,IE10等却没有问题. 原因是Json末尾多了个逗号.IE7下js ...
- 视频播放器之————JW Player参数详解
JW Player参数详解 1,安装 下载后,你可以得到一个例子,当用文本或HTML编辑器打开的时候,你可以发现swf是用一段短小的 javascript嵌入到页面上的.这个Javascript是Ge ...
- 匿名函数和Lamda
不是本人所写!网络收集 C#中的匿名函数和Lamda是很有意思的东东,那么我们就来介绍一下,这到底是什么玩意,有什么用途了? 打开visual studio 新建一个控制台程序. 我们利用委托来写一个 ...
- 20160824_CentOS6.4x64_关闭IPv6
1.参考网址: http://blog.csdn.net/suplxj/article/details/7773423 2.我的操作: #cat <<EOF>>/etc/mod ...
- Spring No mapping found for HTTP request with URI错误
访问不了,结果是这里的坑.自己记录下
- Shell 教程
Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操 ...
- python--安装PIL
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,但API却非常简单易用. 安装PIL 在Debian/Ubuntu Linux ...