http://lantian-123.iteye.com/blog/1472008Maven3入门篇
Maven3核心概念
一、Maven插件和目标(Plugins and Goals)
mvn archetype:create -DgroupId=xxx -DartifactId=xxx -DpacageName=xxx
这条命令中就有Archetype插件的create目标,其中archetype是插件的标识、create是目标标识。一个Maven插件是一个或多个目标的集合,如Compiler插件包含一组编译源代码和测试源代码的目标。
二、Maven的生命周期(Lifecycle)
一个生命周期是一些阶段(phase)的序列。
Maven支持多种不同的生命周期,常用的位默认(default lifecycle)的生命周期。从验证项目的基本完整性阶段开始到把项目发布成产品阶段结束。
Maven在执行一个阶段的时候,首先会有序的执行前面的所有阶段,同时插件目标可以附着在是生命周期阶段上。当Maven经过一package作为结束的默认生命周期的时候,目标按顺序执行:
运行:mvn package 与 mvn resources:resources \ compiler:compile resources:testResources compiler:testCompile surefire:test jar:jar
能达到相同的效果
三、Maven坐标(co-codinates)
Maven定义了一组标识,用来唯一标识一个项目、一个依赖(dependency)、或者一个插件。
groupId,artifactId,packaging,version组成一个项目的坐标。相当于空间中的某个点。当一个项目通过依赖、插件或者父项目引用来关联另外一个项目时,Maven通过左边来定位一个项目。Maven坐标格式为:groupId:artifactId:packeging:version,以冒号分隔书写。如:mavenbook:myapp:jar:1.0-SNAPSHOT。
四、Maven仓库(Repositories)
Maven仓库是项目构件的一个集合,Maven是远程仓库下载构件和插件到本机,Manven仓库按照如下目录格式存储构件
/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
如:commons-email-1.1.jar
Maven仓库既是一个从远程仓库下载的构件的缓存,也允许项目相互依赖。如:项目A和项目B,B依赖于A产生的构件,构建项目B的时候,Maven会从本地仓库取得项目A的构件。
五、Maven依赖管理(Dependency Management)
依赖即为项目依赖的库文件。比如包含测试单元的项目中有JUnit的依赖,在pom.xml中有dependencies的定义。Maven支持传递性(transitive dependencies)
Maven提供了不同的依赖范围(dependency scope)
maven依赖关系中Scope的作用
compile: 缺省值,适用于所有阶段,会随着项目一起发布。
provided:provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不会想要在打包好的 WAR中包含这个Servlet API;这个Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。
runtime: 在运行时使用,但在编译的时候不需要。如JDBC驱动,而只有在运行的时候才需要JDBC驱动 实现,适用运行和测试阶段。
test:只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system:类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
六、站点生成和报告(Site Generation and Reporting)
Maven能够生成文档和报告。运行 mvn site,在target/site/index.html下可以看到一个详细的测试结果的描述,API的JavaDoc文档。