Maven
Maven是什么?
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。
为什么要使用Maven?
Java开发中往往除了核心的JDK之外,我们还要用到大量的第三方jar包,尤其是我们在使用第三方框架开发时,框架本身又要依赖一堆第三方jar包,这些第三方jar包有可能还会依赖别的jar包。我们再手动处理这些依赖时往往效率低下,很头疼。
maven可以很好的解决上面的问题,它能够自动处理级联依赖,还有依赖之间版本兼容问题。
什么场合下会用到maven?
当我们的项目中依赖的第三方jar包很多,关系很复杂时,靠我们手工来处理几乎不可能,那么这种情况下,maven就非常适合了。
怎么使用Maven?
maven下载、安装
-
maven下载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o2bzW4sH-1571359642734)(maven_download.png)]
-
maven安装
把上面下载下来的zip包解压到你喜欢的路径下, 最好不要有中文、空格。
-
环境变量配置
将mvn加压后的bin目录的路径添加到系统的Path环境变量中。
-
在IDE中配置maven
- eclipse中
- IDEA中
maven仓库
-
中央仓库
maven默认的一个远程仓库。可以理解为是一个特殊的远程仓库。
-
远程仓库
当首次运行maven项目时,本地仓库中空空如也,maven需要有一个地方下载我们项目中需要的所有依赖包,这个地方就是远程仓库。 一般是各个公司内部会搭建一套远程仓库
-
本地仓库
Windows系统,本地仓库默认路径是用户下面的.m2目录下的repository目录,如:C:\Users\John.m2\repository
本地仓库的作用是将maven联网下载的jar包做缓存,下次用到同样的jar包就优先使用本地仓库中的jar包,不会再次联网下载。
配置阿里云镜像
配置阿里云镜像有两种方式: 修改全局配置文件或者项目中pom.xml
-
第一种方式:修改全局配置
在maven安装目录下的conf目录下,找到settings.xml,在标签下添加如下内容:
<mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror>
-
第二种方式: 修改项目的pom.xml,在其中添加
<repositories> <repository> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
maven构建的生命周期
-
clean
清理工程编译生成的文件
-
validate
-
compile
编译工程
-
test
-
package
打包工程,一般打包格式包括jar、war两种
-
verify
-
install
将maven工程打包,并安装到本地maven仓库
-
site
-
delpoy
构建周期使用特点:当执行后面的周期时,maven会自动将前面的周期先执行。如执行install周期,实际上maven会先执行compile,再执行package,然后才是install
执行maven构建周期
语法:
mvn 构建周期名称 [-D参数=参数值]
如:
清理编译路径
mvn clean
打包并忽略单元测试
mvn package -Dmaven.test.skip=true
多个构建周期可以一起使用,如下面的清理并打包一起执行
mvn clean package
Maven中配置文件的级别
- 全局配置文件: %maven_home%/conf/settings.xml
- 用户级别的配置文件:C:\Users\John\.m2\settings.xml
- 项目级别配置文件: 项目根路径下的pom.xml
POM文件
在maven工程中有一个很重要的配置文件,pom.xml。这个文件记载了整个工程依赖的所有第三方jar包,和工程中模块的依赖情况。
我们经常需要打交道的就是这个pom.xml文件。
maven工程三要素
- groupId : 组织id
- artifactId: 项目的名字
- version: 版本号
maven工程的三要素决定了我们再添加依赖时,唯一定位到一个jar包。
指定打包方式
通过packaging标签指定: 一般常用的值包括:jar、war
<packaging>jar</packaging>
Maven中的Properties
maven中的properties标签有两种
-
自定义属性
通常用来统一管理版本,在 < dependencies > 标签中配置依赖时可以通过${自定义属性}来引用<properties>标签中定义的属性
<properties> <junit.version>4.12</junit.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies>
-
内置属性
内置属性的定义方式和自定义属性一样,但是不需要我们显示去使用,maven会自动读取。通常用来指定项目编码、编译版本等
<properties> <!-- 指定源代码文件的编码 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 指定测试报告输出编码 --> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 编译时的编码 --> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <!-- 设置编译版本 --> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties>
依赖管理
在maven的pom.xml中,依赖的管理通过标签来管理,该标签下可以出现一个或多个子标签。
一个标签代表一个依赖。
具体来说配置方式:
<dependencies>
<!-- 添加c3p0依赖 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
</dependencies>
我们添加完上面的配置以后,maven会将c3p0及相关的依赖自动添加到项目的构建路径下
maven中依赖的Scope
maven中的scope有:
- test
- compile(默认)
- runtime
- provided
- system
- import
范围 | 描述 |
---|---|
compile | 该范围表明相关依赖是只在项目的类路径下有效。默认取值。 |
provided | 该范围表明相关依赖是由运行时的 JDK 或者 网络服务器提供的。 |
runtime | 该范围表明相关依赖在编译阶段不是必须的,但是在执行阶段是必须的。 |
test | 该范围表明相关依赖只在测试编译阶段和执行阶段。 |
system | 该范围表明你需要提供一个系统路径。 |
import | 该范围只在依赖是一个 pom 里定义的依赖时使用。同时,当前项目的POM 文件的 部分定义的依赖关系可以取代某特定的 POM。 |
在Eclipse中新建maven工程
- 新建工程选择maven project
- 选择项目骨架模板
- JavaSE工程建议选择maven-archetype-quickstart
- JavaWeb工程建议选择maven-archetype-webapp
- 填写项目三要素: groupId、artifactId、version
- Finish
Maven的目录结构
-
JavaSE
maven_test // 项目文件夹(根目录) src main resources // 存放配置文件 java // 此处放Java源代码 test resources // 存放单元测试配置文件 java // 此处放单元测试源代码 target // 此处存放maven编译、打包生成的文件 pom.xml // 核心配置文件
-
JavaWeb
maven_test // 项目文件夹(根目录) src main resources // 存放配置文件 java // 此处放Java源代码 webapp // web工程部署根目录 WEB-INF web.xml xxx.jsp xxx.html static // 只是示范,不是maven标准目录结构 js xx.js css xx.css test resources // 存放单元测试配置文件 java // 此处放单元测试源代码 target // 此处存放maven编译、打包生成的文件 pom.xml // 核心配置文件