Maven学习笔记
Maven学习笔记记录-来自网易云课堂-及网络
一、Maven是什么
Maven 是一个项目管理工具,它可以管理项目开发的全部过程(编译、测试、打包、部署、运行等)的所有东西。
Maven 对依赖关系的特性进行细致的分析和划分,通过Maven管理Jar包可以避免手动添加jar包带来的冲突,
二、Maven的安装
1、官网下载zip包,解压到本地计算机;http://maven.apache.org/download.cgi
2、和JAVA一样,需要配置环境变量,配置bin目录;
3、验证安装:打开命令行cmd,输入 mvn -version,如果正常打印出maven版本信息,说明安装成功。(打印出的maven版本信息也会打印出java的安装目录,因此安装maven之前,要先安装并配置好java环境)
三、Maven的运行机制
1、Maven的生命周期
clean、default、site 三个生命周期是互相独立的,没有任何的关系。clean生命周期的目的是清理项目,default生命周期负责项目构建,site生命周期负责建立项目站点。
maven的每套生命周期都包含多个阶段,这些阶段是具有严格执行顺序的。必须顺序执行完之前的每一个阶段才能执行当前阶段。如clean生命周期包含pre-clean、clean和post-clean三个阶段,如果调用命令如“mvn clean”执行clean阶段,则会自动执行pre-clean阶段完成后,再执行clean阶段。
2、Maven插件
插件是Maven的核心,所有的功能均有插件提供,每个插件有多个goal(目标),目标是插件功能的细分。比如:maven-clean-plugin插件有三个goal,分别是pre-clean、clean、post-clean。
Maven内置插件:
3、Maven仓库
仓库是用来存放jar包的地方;从仓库下载依赖包的顺序是:本地-->私服-->远程
Maven远程仓库:中央仓库是maven的默认仓库,在maven安装路径下\lib\maven-model-bulider-3.3.9.jar ,打开jar包里的pom-4.0.0.xml <respository>标签下的url子表签里配置的地址(国外的服务器)。
4、Maven定位jar的方法:Maven坐标
groupId :公司名或者组织名;
artifactId:项目名称或者模块名称;
version:版本号
例如:
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.11.RELEASE</version>
四、Maven命令的分类及用法
插件命令
查看插件描述命令:mvn help:describe -Dplugin=[插件的groupId]:[artfactId]:[version(可选)]
使用插件命令:mvn [插件名称(简写)]:goal
上面的命令:mvn help:describe -Dplugin=org.apache.maven.plugins:maven-archetype-plugin
可以简写为:mvn help:describe -Dplugin=archetype
使用Maven插件命令创建项目目录结构(项目骨架):
在CMD窗口,进入到自己的工作空间的空目录下,输入命令: mvn archetype:generate
但是这个命令运行很慢:原因是生成项目骨架,需要模板文件,默认的模板文件需要到中央仓库下载大约4-5M的XML文件,中央仓库又在国外,导致命令速度非常慢。
解决方案:1、提前将文件下载到本地,放到本地仓库的根目录下(用户/.m2/repository,跟repository在同一级目录),然后修改命令: mvn archetype:generate -DarchetypeCatalog=Local 加上一个参数,指定本地资源;
2、或者使用maven内置的模板,命令为:mvn archetype:generate -DarchetypeCatalog=internal
生命周期命令
生命周期命令是插件命令的有序集合;
五、使用Maven将项目导入到IDE中
把使用Maven创建的java项目,导入到IDE中,例如导入到eclipse,直接使用eclipse的导入,因为没有 .classpath 和 .project 文件,eclipse是无法识别maven创建的项目的。
查看maven提供的eclipse插件的描述:mvn help:describe -Dplugin=eclipse
在CMD窗口中进入到maven创建的java项目目录,使用eclipse插件的eclipse的goal: mvn eclipse:eclipse ; 该命令有两个作用:一个是增加让eclipse识别的文件,一个是下载pom.xml依赖的JAR包。
命令执行成功就会在目录下生成 .classpath 和 .project 文件,这样就可以被Eclipse导入识别了,但是导入后项目出现感叹号,错误提示没有加载 M2_REPO 的jar包,进入到eclipse的 Java Bulid Path —— Add Variable ---- Configure Variable ---- NEW
输入:Name: M2_REPO path: 找到本地仓库目录(C://用户/.m2/repository) 点击OK
六、使用Maven编译和测试
分析编译插件: mvn help:describe -Dplugin=compiler
编译源代码: mvn compiler:compile
在项目根目录下的pom.xml文件,项目需要什么jar文件,只需要在该文件中配置上去,maven就会自动先从本地仓库去找,找不到就去远程中央仓库中下载。
<dependencies> <dependency> <groupId>Junit</groupId> <artifactId>junit</artfactId> <version>3.8.2</version> <scope>test</scope> </dependecy> </dependencies>
分析测试插件及目标: mvn help:describe -Deplugin=surefire
mvn clean :清理项目命令,会将项目下的taget目录删掉,即删掉了编译的文件;
clean之后,直接执行surefie命令运行测试用例,可以运行成功,但是并没有执行任何测试用例,因为代码没有编译。
七、使用Maven对项目进行打包
使用生命周期阶段命令,命令行进入到项目目录,输入命名: mvn package
如果包含第三方jar包,如何打包? 需要使用 shade 插件,所以要在pom.xml中配置shade插件,因为shade插件要绑定到具体一个生命周期上,所以还要配置上package;
如何打一个可执行jar包?
配置pom.xml文件,添加<configuration>标签,并指定主方法入口可JDK版本,再使用maven命令打包后,JAR包中的.MF文件中,打开这个文件可以看到程序的主入口,然后就可以使用java命令的-jar来执行这个JAR包了。