- 概念
Maven对项目进行模拟抽象,充分运用面向对象的思想构建项目。Maven可以通过一小段描述信息来管理项目的构建,还提供高级项目管理工具 - 作用
(1) maven对项目的第三方构建(jar包)进行统一管理。向工程添加jar包不需要复制粘贴,通过maven的一小段描述就可以引用jar包
(2) maven提供一套对项目生命周期管理(从项目开始到项目完成)的标准,开发人员和测试人员统一使用maven进行项目的构建。项目生命周期管理:编译,测试,打包,部署,运行
(3) maven对工程分模块管理,提高开发效率 - Maven的概念模型
(1) 项目对象模型(Project Object Model),也就是POM对象模型。每个maven工程都有一个pom.xml文件,定义工程所依赖的jar包(一小段描述就写在这里),打包运行方式。
(2) 依赖管理系统(基础核心)。maven对项目工程所依赖的jar包统一管理规范。注意,现在不叫做导入jar包,而是引入依赖
(3) maven定义一套项目生命周期。清理,初始化,编译,测试,报告,打包,安装,部署,站点生成
(4) 一组标准集合(项目目录结构的标识)。maven工程自己标准的工程目录结构(maven对项目的代码目录结构是有要求的)
(5) maven可以通过插件(扩展功能)进行扩展。例如开发中使用的tomcat插件 - maven仓库
maven将所有的jar包放在仓库里面,我们通过在pom.xml文件中描述一小段文字就可以引用仓库里的jar包
| 仓库名称 | 作用 |
|---|---|
| 本地仓库 | 相当与缓存,工程第一次会从远程仓库(互联网) 去下载jar包,将jar包存在本地仓库(在本地电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,找不到才会去远程仓库找 |
| 中央仓库 | 就是远程仓库,仓库中的jar由专业团队(maven团队)统一维护。中央仓库地址:http://repo1.maven.org/maven2/ |
| 远程仓库 | 在公司内部架设一台私服,其他公司架设一台仓库,对外公开 |
- maven坐标
maven坐标的作用:maven用来确定jar包在仓库里面的位置,坐标可以唯一确定jar包的位置,定位到该jar包
坐标的定义元素:
(1) groupId:定义当前Maven项目名称,这是maven仓库里面jar所在位置第一层目录
(2) artifactId:定义项目模块,这个是maven仓库里面jar所在位置的第二层目录
(3) version:定义当前项目的当前版本,这是maven仓库里面jar所在位置第三层
通过以上三层目录就可以定位唯一的一个jar包
例如:要引入junit的测试jar包,只需要在pom.xml配置文件中配置引入junit的坐标即可
junit junit 4.12 test
注意:由以上可得,坐标的每个组成部分都对应仓库里面的一层目录结构,大多数每个组成部分对应一个目录,但是有些groupId项目名字对应多个目录,而模块名字和版本号都只对应一个目录
例如
maven生命周期常用命令javax.servlet ---对应两个目录/javax/servlet(有n个点就有n+1级目录)javax.servlet-api ---对应一个目录/javax.servlet-api3.1.0 ---对应一个目录/3.1.0provided
项目的声明周期管理就是项目的编译,测试,运行,打包,部署等。项目生命周期的功能都是通过maven里面的mvn命令,具体命令如下
| 命令 | 说明 |
|---|---|
| mvn clean | 清除原来的编译结果 |
| mvn compile | 编译 |
| mvn test | 运行测试代码 mvn test -Dtest=类名(单独运行测试类) |
| mvn package | 打包项目 mvn package -Dmanven.test.skip=true(打包时不执行测试) |
| mvn install | 将项目打包并安装到本地仓库 |
| mvn deploy | 发布到本地仓库或服务器 |
junit junit 4.12 test --------依赖范围,配置test,只有test目录可以使用
| 依赖范围 | 对于编译classpath有效 | 对于测试classpath有效 | 对于运行时的classpath有效 | 例子 |
|---|---|---|---|---|
| compile | Y | Y | Y | spring-core |
| test | N | Y | N | junit |
| provided | Y | Y | N | servlet-api |
| runtime | N | Y | Y | JDBC驱动 |
| system | Y | Y | N | 本地maven仓库之外的类库 |
| 编译:指main目录下编译时可用 | ||||
| 测试:指test目录下编译时可用 | ||||
| 运行:在部署到服务上运行的时候可用 |
注意:
(1) 满足运行时有效的才会打包到war或jar包
(2) system,不是使用仓库的jar包,而是使用本地文件系统的jar包,需要域systempath一起配合使用,如下
像这样把包拷到项目里面,然后指定到项目下面就可以了。 javabuilder javabuilder 1.0 system ${project.basedir}/src/main/webapp/WEB-INF/lib/javabuilder.jar
不会打到war,如果运行需要使用,需要手动将jar包拷贝到tomcat/lib下



