简介
Maven是 Apache 组织下的一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理。
它的跨平台性保证了在不同的操作系统上可以使用相同的命令来完成相应的任务。
项目构建过程
如图为项目构建的过程。上面的过程maven都可以实现。
清理:把编译后的.class文件全部清理掉,防止修改了类之后运行的还是原来的.class文件。
生命周期
生命周期阶段 |
描述 |
validate |
验证项目是否正确,并且所有必要的信息可用于完成构建过程 |
initialize |
建立初始化状态,例如设置属性 |
generate-sources |
产生任何的源代码包含在编译阶段 |
process-sources |
处理源代码,例如,过滤器值 |
generate-resources |
包含在包中产生的资源 |
process-resources |
复制和处理资源到目标目录,准备打包阶段 |
compile |
编译该项目的源代码 |
process-classes |
从编译生成的文件提交处理,例如:Java类的字节码增强/优化 |
generate-test-sources |
生成任何测试的源代码包含在编译阶段 |
process-test-sources |
处理测试源代码,例如,过滤器任何值 |
test-compile |
编译测试源代码到测试目标目录 |
process-test-classes |
处理测试代码文件编译生成的文件 |
test |
运行测试使用合适的单元测试框架(JUnit) |
prepare-package |
执行必要的任何操作的实际打包之前准备一个包 |
package |
提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件 |
pre-integration-test |
完成执行集成测试之前所需操作。例如,设置所需的环境 |
integration-test |
处理并在必要时部署软件包到集成测试可以运行的环境 |
pre-integration-test |
完成集成测试已全部执行后所需操作。例如,清理环境 |
verify |
运行任何检查,验证包是有效的,符合质量审核规定 |
install |
将包安装到本地存储库,它可以用作当地其他项目的依赖 |
deploy |
复制最终的包到远程仓库与其他开发者和项目共享 |
maven安装
Maven 3.2 要求 JDK 1.6 或以上版本, 而Maven 3.0/3.1 需要 JDK 1.5 或以上,确保已安装JDK,并 “JAVA_HOME” 变量已加入到 Windows 环境变量。
从http://maven.apache.org/官网上下载最新版本的maven
把下载下来的maven解压缩,然后有一个bin文件夹,这是一个bin的文件夹的目录
F:workcoursemavenmavenbin
把该目录追加到环境变量的path中。
(有的要求设置系统变量M2_HOME => D:softwareyiibai.comapache-maven, MAVEN_HOME =>D:softwareyiibai.comapache-maven,然后把%M2_HOME%bin添加到path,Maven 说只是添加 M2_HOME , 但一些项目仍引用 Maven 的文件夹 MAVEN_HOME所以都写上)
利用命令行检查是否成功:mvn -v
说明maven安装成功了
maven文件目录说明
说明:
bin中存放可执行的二进制文件
conf存放settings.xml文件
lib 运行maven所依赖的jar包
settings.xml文件:主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;
仓库说明
仓库的功能
Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依 赖JAR,这节省了磁盘资源。此外,由于Maven仓库中所有的JAR都有其自己的坐标,该坐标告诉Maven它的组ID,构件ID,版本,打包方式等 等,因此Maven项目可以方便的进行依赖版本管理。你也不在需要提交JAR文件到SCM仓库中,你可以建立一个组织层次的Maven仓库,供所有成员使 用。
简言之,Maven仓库能帮助我们管理构件(主要是JAR)。
本地仓库与远程仓库
运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。如果 尝试过所有远程仓库之后,Maven还是没能够下载到该文件,它就会报错。
Maven缺省的本地仓库地址为${user.home}/.m2/repository 。
中央仓库:
Maven缺省的远程仓库,即Maven中央仓库,当Maven在本地仓库找不到需要的 jar文件时,它会查找远程仓库,而一个原始的Maven安装就自带了一个远程仓库——Maven中央仓库。中央仓库的id为central,远程url地址为http://repo1.maven.org/maven2,它关闭了snapshot版本构件下载的支持。
Maven 的中央资源库网站是这样的:
Maven中心储存库网站已经改版本,目录浏览可能不再使用。这将直接被重定向到 http://search.maven.org/。这就好多了,现在有一个搜索功能:
PS:目录浏览功能被禁用,但是,当你建立 Maven 的项目,它仍然会从 “http://repo1.maven.org/maven/” 得到依赖, 您可以从 Maven 验证输出。
本地仓库配置
本地仓库是存储依赖包的本地目录,默认情况下,Maven的本地资源库默认为 .m2 目录文件夹:C:UsersAdministrator.m2
我们可以自定义本地仓库的的路径
将安装maven目录下的conf文件下(F:workcoursemavenapache-maven-3.0.5-binapache-maven-3.0.5conf)中的settings.xml文件,复制到C:UsersAdministrator.m2
修改settings.xml文件
<localRepository>F:/work/course/maven/mavenRepository/</localRepository>
指定本地仓库的路径,在这里mavenRepository就是仓库的路径
如果没有.m2文件,在命令行随便执行一个maven命令就会出现,如mvn
没有出现就自己建一个,如进入命令行C:UsersAdministrator目录,执行md .m2命令就可以建立出来.m2文件。
conf下的settings.xml文件是全局的(所有用户都是用的),.m2下的settings.xml是一个用户的(一台计算机可以有多个用户,Administrator.m2就代表管理员自己的)
maven项目的文件目录说明
maven项目中的名字是这样约定好的
src/main/java 存放项目的java文件
src/main/resources 存放项目的资源文件,如spring,hibernate的配置文件
src/test/java 存放所有的测试的java文件
src/test/resources 存放测试用的资源文件
target 项目输出位置
pom.xml 文件
pom文件详解
project:表示一个工程
version:为版本号-SNAPSHOT结尾为开发中的,REALISE……为发布后的版本
groupId,artifactId,version结合起来称为坐标,也就是在库中的位置
dependency表示依赖,项目所需要的jar包在该标签中的坐标在厂库中找
scope默认的值是compile,scope就是指定在干什么的时候起作用,test测试,compile编译等。
parent定义父项目,父项目中要定义packaging标签的内容为pom
packaging定义打包方式,被依赖用jar,被继承用pom,聚合项目(要发布的项目,下面有好多子项目)用pom,主工程不被其他项目依赖的一般是controller层用war
packing默认是jar类型。
maven变量
在pom文件中可以使用maven变量来引用其他地方设置的值。
Maven内置隐式变量
Maven提供了三个隐式的变量可以用来访问环境变量,POM信息,和Maven Settings