一、概念
1.0 Maven是什么
Maven 是一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西。
2.0 Maven的生命周期
maven把项目的构建划分为不同的生命周期(lifecycle)。粗略一点的话,它这个过程(phase)包括:编译、测试、打包、集成测试、验证、部署。maven中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后maven执行的时候,就依照过程的发展依次调用这些goal进行各种处理。
这个也是maven的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven同样提供了配置文件,可以依照用户要求,跳过某些阶段。
3.0 Maven的标准工程结构
Maven的标准工程结构如下:
pom.xml(maven的核心配置文件)
src
main
java(java源代码目录)
resources(资源文件目录)
test
java(单元测试代码目录)
target(输出目录,所有的输出物都存放在这个目录下)
classes(编译后的class文件存放处)
4.0 Maven的"约定优于配置"
所谓的"约定优于配置",在maven中并不是完全不可以修改的,他们只是一些配置的默认值而已。但是除非必要,并不需要去修改那些约定内容。maven默认的文件存放结构如下:
每一个阶段的任务都知道怎么正确完成自己的工作,比如compile任务就知道从src/main/java下编译所有的java文件,并把它的输出class文件存放到target/classes中。
对maven来说,采用"约定优于配置"的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。
5.0 Maven坐标
maven使用如下几个要素来唯一定位某一个输出物:
5.1 groudId
定义当前Maven项目隶属的实际项目。首先,Maven项目和实际项目不一定是一对一关系,一个实际项目往往会被划分为多个模块。
5.2 artifactId
定义实际项目中的一个Maven项目,即当前项目,推荐使用实际项目名作为artifactId的前缀。
5.3 version
定义当前项目所处的版本。
5.4 packaging
定义项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。
二、安装
2.0 配置环境变量
注意:安装maven之前,必须先确保你的机器中已经安装了JDK。
1.解压压缩包(以apache-maven-3.3.9-bin.zip为例)
2.添加环境变量MAVEN_HOME,值为apache-maven-3.3.9的安装路径
3.在Path环境变量的变量值末尾添加%MAVEN_HOME%in
4.在cmd输入mvn –version,如果出现maven的版本信息,说明配置成功。
2.1 本地仓储及镜像仓库配置
中央仓库访问较慢,一般使用国内淘宝的
下载的jar包,都会统一存放到本地仓库中。我们需要配置本地仓库的位置。
打开maven安装目录,打开conf目录下的setting.xml文件。
C:Program FilesJavaapache-maven-3.3.9新建 .m2目录
settings.xml--> 55: <localRepository>F:javamaven
epository</localRepository> 本地 jar包存放地址
159: <mirror>
<id>UK</id>
<name>UK Central</name>
<url>http://uk.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
以下阿里云仓库下载较快
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
三、pox.xml配置详解
modelVersion是4.0.0,这是当前仅有的可以被Maven2&3同时支持的POM版本,它是必须的。
1 <project xmlns="http://maven.apache.org/POM/4.0.0" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 4 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <!-- 基本设置 --> 8 <groupId>反写的公司名+项目名</groupId> 9 <artifactId>项目名+模块名</artifactId> 10 <!-- 0.0.1 11 大版本号、分支版本号、小版本号 12 snapshot快照 13 alpha内部测试 14 beta公测 15 Release稳定 16 GA正式发布 17 --> 18 <version>...</version> 19 <!--默认jar 20 war zip pom 21 --> 22 <packaging>...</packaging> 23 24 <dependencies> 25 <dependency> 26 <groupId>org.springframework</groupId> 27 <artifactId>spring-context</artifactId> 28 <version>3.2.4.RELEASE</version> 29 <type>jar</type> 30 <!-- 依赖范围 31 1. compile:没有声明时默认,对于编译、运行、测试三种classpath都有效;eg:spring-core 32 2. test:测试依赖范围,只对测试classpath有效;eg:JUnit 33 3. provideed:已提供依赖范围,对编译和测试classpath有效;eg:servlet-api 34 4. runtime:运行时依赖,对测试和运行classpath有效;eg:jdbc驱动实现 35 5. system:系统依赖范围:和provideed一致,但是必须通过systemPath元素显式指定依赖文件路径,不通过maven仓库解析,可能造成不可移植 36 <scope>system</scope> 37 <systemPath>${java.home}/lib/rt.jar</systemPath> 38 --> 39 <scope>test</scope> 40 <!-- 设置依赖是否可选 true/false 默认false 根据代码单一性原则 一般不设置true--> 41 <optional></optional> 42 <!-- 排除传递性依赖,有些jar包依赖另一些jar,而这些jar在项目中已显式引入,为避免重复可选择过滤掉 --> 43 <exclusions> 44 <exclusion> 45 <groupId></groupId> 46 <artifactId></artifactId> 47 </exclusion> 48 </exclusions> 49 </dependency> 50 </dependencies> 51 52 53 54 <parent>...</parent> 55 <dependencyManagement>...</dependencyManagement> 56 <modules>...</modules> 57 <properties>...</properties> 58 59 <!-- 构建过程的设置 --> 60 <build>...</build> 61 <reporting>...</reporting> 62 63 <!-- 项目信息设置 --> 64 <name>...</name> 65 <description>...</description> 66 <url>...</url> 67 <inceptionYear>...</inceptionYear> 68 <licenses>...</licenses> 69 <organization>...</organization> 70 <developers>...</developers> 71 <contributors>...</contributors> 72 73 <!-- 环境设置 --> 74 <issueManagement>...</issueManagement> 75 <ciManagement>...</ciManagement> 76 <mailingLists>...</mailingLists> 77 <scm>...</scm> 78 <prerequisites>...</prerequisites> 79 <repositories>...</repositories> 80 <pluginRepositories>...</pluginRepositories> 81 <distributionManagement>...</distributionManagement> 82 <profiles>...</profiles> 83 </project>
2017-08-22 22:15:53