maven学习笔记

概述

对于Java程序员来说,Maven是构建项目的一大利器,它可以方便、快速的构建出软件的基本目录以及配置文件。

安装

Maven是基于Java的一个项目构建工具,所以,安装Maven之前必须要安装JDK,安装方法就是配置环境变量。

介绍

pom文件介绍

POM,全称是Project Object Model.它是Maven工程最基础的文件,像定义项目名称、定义项目所属组名称、引入依赖等功能都是在pom.xml文件中声明定义的。

Maven生命周期介绍

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的全局设置。在这里,主要需要说明两点问题。

  1. 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学习笔记
描述如图中:
maven学习笔记

用maven创建一个web项目的命令

mvn archetype:generate -DgroupId=com.testcompany.project2 -DartifactId=project2 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

maven学习笔记
web项目会在main目录下生成webapp目录。用maven,相当于把web应用的基础结构搭建好了。

参考文档:极客学院的Maven教程

上一篇:分析midea0978的《一个C#算法分析求解》(二)


下一篇:《图解HTTP》学习笔记