Maven的主要功能概念及使用
一、maven的功能?
- 构建工具(打包项目)
- 依赖管理(jar包依赖)
- 项目信息聚合
构建工具:
[清理]-->[编译]-->[测试]-->[报告]-->[打包]-->[部署]
依赖管理
管理项目中所使用的jar包(主要作用)
项目信息聚合
版本信息、开发者信息、测试报告.......等等
二、maven的安装
1. 安装maven
- 下载解压 maven 压缩包(http://maven.apache.org/)
- 配置环境变量:
- ①MAVEN_HOME :maven的安装地址
- ②path:%MAVEN_HOME%in
Maven本地仓库的配置:
maven的仓库一般在C盘用户下---->用户名---->.M2文件--->resporsitry,如果没有出现,去cmd中随便运行个Maven命令就会自动生成,不需要自己建(例如命令行输入命令:mvn clean)
默认位置:C盘--->用户--->自己的用户名--->.m2---->resporsitry
在命令行执行如下命令:
mvn --version
如出现类似如下结果,则证明 maven 安装正确/成功。
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: D:Program Filesapache-maven-3.5.0in..
Java version: 1.8.0_144, vendor: Oracle Corporation
Java home: C:Program FilesJavajdk1.8.0_144jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
如需更改本地仓库位置
在如下路径中找到settings.xml配置文件:
Maven的安装路径---->conf---->settings.xml
找到第53行代码,找到
把标签内的替换成仓库的地址。
2. pom文件
setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。
pom.xml基础配置
<?xml version="1.0" encoding="UTF-8"?> <!--必须第一行-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--pom.xml的约束文件-->
<!-- 模型版本。 -->
<modelVersion>4.0.0</modelVersion>
<!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 : ${file.encoding} -->
<properties>
<file.encoding>UTF-8</file.encoding>
<junit.version>4.11</junit.version>
</properties>
<!-- 定义本项目的依赖关系 -->
<dependencies>
<!-- 每个dependency都对应这一个jar包 -->
<dependency>
<!--一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索, 然后引入你的工程。 -->
<!-- 公司或者组织的唯一标志-->
<groupId>junit</groupId>
<!-- 项目的 唯一 ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>junit</artifactId>
<!-- 项目的版本号 -->
<version>${junit.version}</version> <!--这里就可以引用上面定义的常量-->
<!-- jar包的依赖范围 -->
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<!--使用的插件列表 。 -->
<plugins>
<plugin>
<!-- tomcat 7 插件 -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/${project.artifactId}</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
三、maven项目的目录结构:
- Java程序的目录结构
- Java-Web程序的目录结构
四、Maven核心概念
1. 坐标
在 maven 中坐标就是为了定位一个唯一确定的 jar 包。坐标的组成部分有:
* groupId:定义当前Maven组织名称
* artifactId:定义实际项目名称
* version:定义当前项目的当前版本
2. 依赖管理
依赖管理就是对项目中 jar 包的管理。可以在 pom 文件中定义 jar 包的坐标,管理依赖。
依赖声明主要包含如下元素:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
3. 依赖范围
依赖范围(Scope) | 对主代码ClassPath有效 | 对测试代码ClassPath有效 | 被打入jar / war包中 | 例子 |
---|---|---|---|---|
compile | yes | yes | yes | log4j |
test | - | yes | - | junit |
privided | yes | yes | - | servlet-api |
runtime | - | - | yes | jdbc驱动实现类 |
4. 生命周期
Maven 生命周期就是为了对所有的构建过程进行抽象和统一。这个过程分为三个独立阶段(也叫生命周期):
- Clean Lifecycle:在进行真正的构建之前进行一些清理工作。
- Default Lifecycle:构建的核心部分,编译,测试,打包,部署等等。
- Site Lifecycle:生成项目报告,站点,发布站点。
这三个阶段是相互独立的,这意味着,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。
三个阶段中,Default Lifecycle 是核心。
这三个阶段,每个阶段中又各自分为不同的小步骤。当执行某一个小步骤时,它之前的小步骤都会被执行。Default Lifecycle 中包含了几十个小步骤,其中重要和常用的步骤(先后顺序)是:
- ...
- compile: 编译项目的源代码。
- ...
- test: 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
- ...
- package: 接受编译好的代码,打包成可发布的格式,如 JAR 。
- ...
- install: 将包安装至本地仓库,以让其它项目依赖。
- ...
5. 插件
Maven 本质上是一个插件的框架/平台。
例如:
- mvn compile 这个命令,就是由 maven-compiler-plugin 插件提供的。
- mvn test 这个命令,就是由 maven-surefire-plugin 插件提供的。
- mvn package 这个命令,就是由 maven-jar-plugin / maven-war-plugin 插件提供的。
添加插件:
<build>
<plugins>
<plugin>
<!-- 配置插件 -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/demo</path>
<port>8080</port>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
<plugin>...</plugin>
<plugin>...</plugin>
<plugins>
...
</build>
Maven 除了内置/自带的插件外,还可以“安装”第三方插件。任何一个 Maven 动作都是交由具体的插件去完成的。
6.Maven仓库
用来统一存储所有Maven共享构建的位置就是 Maven 仓库。
Maven 仓库分为
-
本地仓库 ~/.m2/repository 每个用户只有一个本地仓库 ~代表C盘下的用户
-
远程仓库
- 中央仓库:Maven 默认的远程仓库 http://repo1.maven.org/maven2
- 私服:是一种特殊的远程仓库,它是架设在局域网内的仓库(例如公司可能会架设私服仓库)
- 以下网站可查询每个项目的坐标
中央仓库位置修改(修改 settings.xml 配置文件)
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
maven仓库用一句话来概括:
Maven项目中会将所需的jar包放到本地仓库,如果没有会到局域网私服仓库中寻找,有的话就带一份回来放入本地仓库。私服仓库没有的话就去中央仓库,如果有就带一份回来放在本地仓库。
五、Maven命令
在使用终端时,Maven 命令需要在 pom.xml 所在目录中执行以下命令。
- mvn compile
- 执行 mvn compile 命令,完成编译操作
- 执行完毕后,会生成 target 目录,该目录中存放了编译后的字节码文件(.class文件)。
- mvn clean
- 执行 mvn clean 命令,完成清理操作。
- 执行完毕后,会将 target 目录删除。
- mvn test
- 执行 mvn test 命令,完成单元测试操作
2.执行完毕后,会在 target 目录中生成三个文件夹:surefire、surefire-reports(测试报告)、test-classes(测试的字节码文件)。
- mvn package
- 执行 mvn package 命令,完成打包操作
- 执行完毕后,会在 target 目录中生成一个文件,该文件可能是 jar、war 。
- mvn clean compile
- 组合指令,等价于先后执行:mvn clean 和 mvn compile 。通常应用于上线前执行,清除测试类
- mvn clean test
- 组合指令,等价于先后执行:mvn clean 和 mvn test,通常应用于测试环节。