概述
对于Java程序员来说,Maven是构建项目的一大利器,它可以方便、快速的构建出软件的基本目录以及配置文件。
安装
Maven是基于Java的一个项目构建工具,所以,安装Maven之前必须要安装JDK,安装方法就是配置环境变量。
介绍
pom文件介绍
POM,全称是Project Object Model.它是Maven工程最基础的文件,像定义项目名称、定义项目所属组名称、引入依赖等功能都是在pom.xml文件中声明定义的。
Maven生命周期介绍
Maven生命周期是指,用Maven创建一个项目,或者编译一个项目,Maven都做了哪些事。
在这里我引用下极客学院的生命周期表
当然,我们在执行Maven命令的时候,可以给定参数,使Maven跳过某些步骤,例如加上参数mvn -DskipTests=true clean install
编译的时候,就会跳过编译测试用例代码的过程,从时间可以加快编译,原理上就是Maven没有执行"test-compile","process-test-classes" 等生命周期步骤。
这里我用两个命令对比说明一下执行顺序不同的影响。mvn clean install
首先,Maven会先执行清理工作,(当然清理工作在Maven中也分为了"pre-clean","clean","post-clean"3个步骤,在这里,我先不管clean的具体步骤)。clean时,会删除之前编译好的文件,这些文件在target目录里。然后,在执行install时,会把编译生成的文件放到target目录里面。mavn install clean
这条命令和上面的命令不同的是clean和install的顺序不同,这条命令执行时,会先把编译生成的文件放到targe文件中,然后执行clean生命周期,清除编译好的文件,即,删除target目录中的文件,这相当于,花了时间编译,最后缺什么也没有留下(被删除了)。
所以,理解Maven的声明周期,有助于解决Maven在编译不通过时,定位问题,具体是哪个过程出了问题,为什么会出现这个问题。
settings.xml介绍
setting顾名思义,就是Maven的全局设置。在这里,主要需要说明两点问题。
- Maven源。Maven默认的源是Apache的,国内访问慢死了。所以一般都换成国内的,比如开源中国的源和阿里巴巴的源。
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<!-- 镜像所有远程仓库,但不包括指定的仓库 -->
<id>mirror-osc</id>
<mirrorOf>external:*,!repo-osc-thirdparty,!repo-iss</mirrorOf>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
2.修改本地仓库路径。
本地仓库是你从远程Maven库中下载来的jar包所存放的位置。默认会在C盘某个地方。所以需要修改它为自己制定的一个地方。例如我的路径为<localRepository>E:\SoftwareKit\maven_repository</localRepository>
放在了E盘下SoftwareKit目录下的maven_repository目录中。
创建工程
windows在CMD下输入:
mvn archetype:generate -DgroupId=com.test.project1 -DartifactId=project1 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
这会在cmd当前所在路径生成一个Maven工程。
项目名称是project1;项目代码所属的组织是com.test.project1(其实就是包名)。第三个属性看样子是快速构建;第四个属性是使用非交互模式进行,即,点击Enter后,会自动构建完成,不需要再手动输入参数了。
maven工程目录结构
用上面的命令会生成如下图目录结构的项目:
描述如图中:
用maven创建一个web项目的命令
mvn archetype:generate -DgroupId=com.testcompany.project2 -DartifactId=project2 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
web项目会在main目录下生成webapp目录。用maven,相当于把web应用的基础结构搭建好了。