1. Maven 是什么?
Maven 是一个Java 项目构建工具,那么什么叫java 项目的构建工具呢, 简单的说就是通过调用JVM的封装好的命令(比如jar,javac..)命令来编译,打包成jar或者war包。
所以说如果不是用maven 去构建项目的话, 我们就只能使用jdk底层提供的命令去打包我们用eclipse 或则别的IDE开发的项目了,这样做的话会很繁琐。
2. Maven 相关概念理解和特点
特点:
a. 约定优于配置
这个特性我觉得体现在以下方面,第一是maven 的项目目录结构如下:
这个目录结构已经约定好了,从名字可以看出main/java 下方的是项目的类文件,main/resource放的是资源文件,test/java放的是测试代码,test/resource放的是测试用的资源文件。
第二点体现约定优于配置的地方是Maven 的life cycle,phase,goal 这几个概念的关系。
Life cycle:maven项目构建的生命周期,一言以蔽之,执行一条maven命令经历了那些phase(阶段),所以life cycle 是由phase 组成的
Phase: 把一个项目的构建过程,分成好几个阶段,validate compile test package verify install deploy
比如说 maven install , 这个构建的生命周期就是 validate compile test package verify
goal :组成phase 的基本单位
validate: 看看项目有没有编译错误
compile: 把*.java 文件编译成*.class 文件放到对应的target 目录下面
test: 跑写的措施代码,比如说junit test case
package :把项目打成一个jar 或者一个war
install :把打成的jar 或者war 放到本地的仓库(默认可以在你的user 目录下找到一个.m 文件夹,就是你的本地仓库的位置)
deploy: 把打成的war 或者jar 发布到远程的私服上面。
b.把项目抽象成一个对象
Maven 使用pom.xml (project object model)文件来描述整个项目,可以把整个项目看做一个对象,把这个pom.xml 文件看作一个对象。每个节点都是一个成员变量。比如dependency,plugins。
3.Maven 环境的搭建
a. Maven jar的管理是这样一个过程,首先会从本地仓库里面去找jar,如果没有找到,就会从私服上面去找依赖的jar,在没有就回去从中央仓库下面去找。其关系过程如下图:
通常情况下私服是可以配置的在maven 的setting.xml 文件中,比如说我就在我的文件下面这么配置的。中央仓库就是maven 默认的一个仓库。
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
2. Maven 环境变量的配置,由于maven 是一个纯java项目,所以首先需要安装好jdk,环境变量的配置可以通过在网上搜索对应的教程,最后通过mvn -version 来验证maven 是不是安装好了。
3. Eclipse + Maven 环境的搭建,通过M2E 把eclipse 和maven 连起来,使Maven 和Eclipse 一起工作,一般情况下比较新的版本的eclipse 都有自带的M2E.
结语:Maven 的功能还是很强大的,Maven 可以通过调用Ant的插件来调用自定义的task ,但是这个ant的插件必须要绑定到Maven 相对应的一个phase 上面,或者直接把这个task 绑到一个phase 上。其实就是,如果需要写一个自定义个的goal, 就必须把这个goal 放到对应的phase 里面,这样就显得Maven 有点不灵活了,同时这也是约定优于配置的缺点吧!