Maven简介
1、什么是Maven?
Maven是一个跨平台的项目管理工具.可以管理项目生命周期中的构建(编译,运行测试,打包,部署等)和项目的依赖(jar包),以及管理项目各个模块之间的依赖关系。
2、Maven产生的原因
项目构建:包括编译,运行测试,打包,部署,运行服务器等一系列操作,每个过程都相当繁琐.
项目依赖:项目越来越大,需要的第三方工具包越来越多,第三方工具包又需要依赖其他维护项目的依赖以及管理依赖之间的关系需要耗费较大的精力.
3、Maven的作用
(1) Maven能提供一种项目的配置,配置好的项目,只需要运行一条简单的命令,就能 完成重复的,繁琐的构建动作。
(2) Maven能提供一种项目的依赖配置.可以自动的导入项目依赖的jar,并且自动导入这 些jar包依赖的第三方的jar包。
(3) Maven提供了一种标准的项目目录结构,测试命名规则等项目的最佳实践方案,统 一了不同项目的学习成本。
Maven的安装
1、检查jdk的安装情况(JDK1.6以上),需要环境变量中配置JAVA_HOME。
2、Maven的下载 地址:http://maven.apache.org/download.cgi
3、将下载好的压缩包解压到文件夹中,目录路径中最好不要有空格和中文
解压好后的目录如图所示
4、配置环境变量
MAVEN_HOME 指向解压文件夹
设置path %MAVEN_HOME%in
5、验证安装是否成功
cmd mvn -v 有显示版本则证明成功
Maven的目录结构
Maven规定了一套标准的目录结构:
src/main/java —— 存放项目的.java文件
src/main/resources —— 存放项目资源文件,如spring、struts2配置文件,db.properties
src/main/webapp —— 存放jsp,css,image等文件
src/test/java —— 存放所有测试.java文件,如JUnit测试类
src/test/resources —— 测试资源文件
pom.xml——主要要写的maven配置文件
target —— 项目由maven自动输出位置
Maven的生命周期
Maven从创建到结束一共经历7个阶段
阶段 |
处理 |
描述 |
验证 validate |
验证项目 |
验证项目是否正确且所有必须信息是可用的 |
编译 compile |
执行编译 |
源代码编译在此阶段完成 |
测试 Test |
测试 |
使用适当的单元测试框架(例如JUnit)运行测试。 |
包装 package |
打包 |
创建JAR/WAR包如在 pom.xml 中定义提及的包 |
检查 verify |
检查 |
对集成测试的结果进行检查,以保证质量达标 |
安装 install |
安装 |
安装打包的项目到本地仓库,以供其他项目使用 |
部署 deploy |
部署 |
拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |
Maven配置
1、Maven仓库
仓库类型 |
仓库名称 |
作用 |
本地仓库 |
本地仓库 |
相当于缓存,在电脑中为一个文件夹.工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。 第二次不需要从远程仓库去下载。先从本地库找,如果找不到才会去远程仓库找。 |
远程仓库 |
中央仓库 |
仓库中的jar包由专业团队(maven团队)统一维护。里面存放了全世界大多数流行开源软件jar包.为Maven默认的远程仓库. |
私服 |
在公司内部架设一台服务器,存放所有需要的jar包,对外公开,供终端进行下载. |
2、Maven配置本地仓库
在Maven的解压文件的config文件夹中,修改settings.xml文件,配置localRepository
3、Maven配置远程仓库镜像
Maven默认的远程仓库,受网络的影响,不够便捷,于是可以使用国内的阿里云的Maven仓库作为中央仓库的镜像。
配置方式可以在settings.xml的配置文件中配置mirrors标签。
Eclipse中配置Maven
1、选择Window--->Preference--->Maven--->Installation-->Add,添加本地安装的Maven,Apply
2、选择User Settings,配置读取Maven配置文件的地址以及本仓库的地址.
3、创建Maven项目
1.创建java项目
选择File--->New--->Project--->Maven Project,选择Next,选中maven-archetype-quickstart,点击Next;
录入groupId,artifactId和version,点击Finish.
groupId,artifactId,version的录入原则:
groupId翻译为组Id,通常的写法为公司域名的倒写,表示本项目属于哪个公司。
artifactId翻译为手工艺品,表示项目的的名字或者模块的名字。
Version通常为X.X.X格式,表示项目的版本号。
创建好之后的pom.xml中
2、创建一个WEB项目
选择File--->New--->Project--->Maven Project,选择Next,选中maven-archetype-webapp,点击Next;
以相同的原则录入groupId,artifactId,version,点击Finish
注意:使用骨架床架出的项目结构,都是不是标准的Maven目录结构,需要添加缺失的文件
3、除了前两种方式外,还可以跳过骨架的选择创建,项目需要在点击Maven Project之后的对话框中勾选Create a simple project。
然后出了需要录入groupId,artifactId和version外,还需要选择packaing打包方式。如果是java项目则选择jar,如果创建的是web项目则选择war。
运行Maven命令
右击项目,选择Run As 或者 Debug As,选择Maven build...,在Goals文本框中可以直接输入Maven的命令,但是不需要添加”mvn”的前缀,例如打包的命令,直接录入”package”就可以执行。
Maven管理依赖和插件
1、管理项目的依赖
<!-- 添加依赖 --> <dependencies> <!-- dependency对应着一个jar文件 --> <!-- dependency寻找jar包时,先从本地仓库当中寻找对应的jar,假如能够找到,直接引入;假如没有找到,会从远程仓库中下载jar包到本地. --> <dependency> <!-- 每个jar的坐标 --> <groupId>com.ujiuye</groupId> <artifactId>OA</artifactId> <version>1.0.0</version> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies>
2、Maven的依赖范围
依赖:项目需要依靠一个jar
依赖范围:依赖一个jar,并不一定是在项目整个生命周期都需要它,可能只是在某一个阶段需要,那么依赖范围就是在定义在哪些阶段依赖这个jar
A依赖B,需要在A的pom.xml文件中添加B的坐标,大家注意到我们之前添加坐标时还有写了一个scope ,这是依赖的范围。
scope有几个可选值, 如:
1、compile: 默认值,表示编译依赖范围。即编译、测试、运行时都需要,会被打包。(默认值compile表明该jar一直全程存在/需要)
2、test:表示测试依赖范围。即测试时需要,编译和运行时不需要,不会被打包。比如:junit。
3、provided:表示已提供依赖范围。即编译、测试时需要,运行时不需要,不会被打包。比如:servlet-api和jsp-api被tomcat容器提供。
服务器本身会提供这些jar,避免和服务器上的这些包冲突
4、runtime:表示运行时提供依赖范围。即编译时不需要,运行和测试时需要,会被打包。比如:jstl、jdbc驱动。
5、system:system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。
3、管理项目的插件
<!--添加插件,修改pom.xml 改变JDK的版本--> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
<!--添加插件 tomcat7服务器插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- 配置tomcat端口 --> <port>9999</port> <!-- Web应用的访问路径--> <path>/abc</path> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin>
Maven中的继承
一个项目中创建一个子项目,在项目名上右击,选择new->module-->maven-->
在父项目中的prom.xml中
1) 声明一个父项目
父项目的打包方式是pom
2) 在父项目中引入子项目中需要的内容。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${com.test.junit}</version> <scope>test</scope> </dependency>
3)在子项目中通过标签指定父项目,这样项目中所有的版本将会统一
<parent> <groupId>com.test</groupId> <artifactId>C</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../C/pom.xml</relativePath> </parent>