Maven 一、Maven简介 1、项目开发遇到的问题 项目构建:包括编译,运行测试,打包,部署,运行服务器等一系列操作,每个过程都相当繁琐. 项目依赖:项目越来越大,需要的第三方工具包越来越多,第三方工具包又需要依赖其他维护项目的依赖以及管理依赖之间的关系需要耗费较大的精力.
2、Maven简介 Maven属于Apache基金会的子项目,百度百科中的解释为:
Maven是一个跨平台的项目管理工具.可以管理项目生命周期中的构建(编译,运行测试,打包,部署等)和项目的依赖(jar包),以及管理项目各个模块之间的依赖关系. 使用Maven的好处: (1)Maven能提供一种项目的配置,配置好的项目,只需要运行一条简单的命令,就能 完成重复的,繁琐的构建动作. (2)Maven能提供一种项目的依赖配置.可以自动的导入项目依赖的jar,并且自动导入这 些jar包依赖的第三方的jar包. (3)Maven提供了一种标准的项目目录结构,测试命名规则等项目的最佳实践方案,统 一了不同项目的学习成本. 二、Maven入门 1、Maven的安装 (1) 检查JDK安装的情况(需要1.6以上的版本): 添加JAVA_HOME,需要指向JDK安装目录; 添加PATH,添加%JAVA_HOME%\BIN;
(2)Maven的下载 http://maven.apache.org/download.cgi (3)apache-maven-3.2.5-bin.zip解压到目录中(目录路径最好不要有空格和中文) 目录介绍 bin:存放执行脚本文件的地方 boot:存放一些扩展的地方,类加载的文件 conf:maven的核心配置文件存放的路径 lib:maven的依赖包
(4)设置系统环境变量,MAVEN_HOME,指向maven的根目录
设置环境变量Path,将%MAVEN_HOME%\bin加入Path中; (5)验证Maven安装 打开cmd窗口,敲入mvn –v 查看
2、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自动输出位置
3、Maven入门案例 (1)按照下面的目录结构创建一个目录结构 –src -----main ----------java -----test ----------java –pom.xml (2)在src/test/java下添加类:
public class Hello { public String sayHello(String name){ return “Hello Maven World!”; } }
(3)在src/test/java下添加类:
import org.junit.Test; import static junit.framework.Assert.*; public class HelloTest { @Test public void testHello(){ Hello hello = new Hello(); String results = hello.sayHello(“World”); assertEquals(“Hello World!”,results); } }
(4)编辑pom.xml 4.0.0 com.xxx.maven Hello 0.0.1-SNAPSHOT Hello junit junit 4.9 test
(5)切换到项目根目录下,运行命令窗口,分别执行下列命令并观察: 执行 mvn compile命令 编译项目 执行mvn clean命令 清除字节码 执行mvn clean compile命令 先清除字节码,在编译项目 执行mvn test命令 执行测试 执行mvn package命令 项目的打包:java项目-jar Web项目-war 执行mvn clean site命令 生成项目相关的网页 执行mvn install命令 将项目打成的包安装到maven本地仓库中 三、Maven配置 1、Maven的仓库 仓库类型 仓库名称 作用 本地仓库 本地仓库 相当于缓存,在电脑中为一个文件夹.工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。 第二次不需要从远程仓库去下载。先从本地库找,如果找不到才会去远程仓库找。 远程仓库 中央仓库 仓库中的jar包由专业团队(maven团队)统一维护。里面存放了全世界大多数流行开源软件jar包.为Maven默认的远程仓库. 私服 在公司内部架设一台服务器,存放所有需要的jar包,对外公开,供终端进行下载.
2、Maven配置本地仓库 在Maven安装路径下,config文件夹中,修改settings.xml配置文件. 配置localRepository标签的值.
3、Maven配置远程仓库镜像 Maven默认的远程仓库,受网络的影响,不够便捷.于是可以使用国内的阿里云的Maven仓库作为中央仓库的镜像. 配置方式可以在settings.xml的配置文件中配置mirrors标签.
其中各个标签的含义: id:当前镜像的唯一的标识 name:当前镜像的名字,主要方便于开发者阅读. mirrorOf:为哪个远程仓库做的镜像.因为中央仓库的id为central,所以为中央仓库做镜像时,其值必须为”central”. url:阿里云Maven仓库的地址.
四、Maven整合Eclipse 1、Eclipse中配置Maven 选择Window—>Preference—>Maven—>Add,添加本地安装的Maven
勾选新添加的Maven
选择User Settings,配置读取Maven配置文件的地址以及本仓库的地址.
2、创建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格式,表示项目的版本号.
3、创建Web项目 选择File—>New—>Project—>Maven Project,选择,Next,选中maven-archetype-webapp,点击Next;
以相同的原则录入groupId,artifactId,version,点击Finish 注意:使用骨架床架出的项目结构,都是不是标准的Maven目录结构,需要添加缺失的文件 还可以跳过骨架的选择创建,项目需要在点击Maven Project之后的对话框中勾选Create a simple project.
然后出了需要录入groupId,artifactId和version外,还需要选择packaing打包方式.如果是java项目则选择jar,如果创建的是web项目则选择war.
工程的目录结构:
4、运行Maven命令 右击项目,选择Run As 或者 Debug As,选择Maven build…,在Goals文本框中可以直接输入Maven的命令,但是不需要添加”mvn”的前缀,例如打包的命令,直接录入”package”就可以执行.
五、Maven管理依赖和插件
1、管理项目的依赖 (1)添加Maven依赖 在项目的pom.xml文件中,添加标签,在标签中的每个依赖需要对应标签.标签中需要填写jar包坐标.
(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依赖不推荐使用。
2、管理项目的插件 Maven创建的项目默认的JDK版本是1.5,可以使用Maven的编译插件改变项目的JDK版本.
可以使用Maven的tomcat7插件作为项目的服务器,启动服务器之后,运行tomcat7:run即可.