以下内容参考自:https://blog.csdn.net/weixin_42112635/article/details/87391047
1. 简介
背景:Apache下的一个纯JAVA开发的项目,用于管理JAVA项目。
作用:一个项目管理(依赖管理)和整合工具(一键构建),为开发者提供了一套完整的构建生命周期框架。
构建的定义:项目从编译、测试、运行、打包、部署整个过程都交给Maven管理。这个郭晨更被称为构建。
能做什么:项目构建、文档生成、报告、依赖、SCMs、发布、分发、邮件列表。
2. Maven标准项目结构
3. Maven下载及配置环境变量
下载地址:http://maven.apache.org/download.cgi
点击 Download 链接,就可以直接进入到 Maven 软件的下载页面:
下载完成后解压,如下:
bin:存放了 maven 的命令
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件( Maven 软件的核心配置文件)
lib:存放了 maven 本身运行所需的一些 jar 包
确认本机已经安装好了JDK环境,将Maven也加入环境变量:
把 MAVEN_HOME 添加到 path 里:
打开cmd命令,输入“cmd -v”,查看mvn版本号:
如果失败了,就检查一下Java环境 是否正常,如果Java环境正常,应该是Maven环境变量配置错了。
4. Maven仓库
Maven仓库有三种类型:本地仓库、远程仓库(私服)、中央仓库。
本地仓库:配置好Maven后,下载的jar所在的路径。一般在“C:\Users\Administrator\.m2\repository”路径下。
远程仓库:我们比较熟悉的国内阿里云仓库,或者其他的私服。因为中央仓库访问量很大,而且在国外,下载会很慢。
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
中央仓库:Maven的顶级仓库。
正常情况下,我们引入jar包时,会现在本地仓库查找;如果本地仓库没有,且配置了元辰给仓库,就去远程仓库找;如果远程仓库也没有,才会去中央仓库找。
那么,如果中央仓库也没有呢?实际开发中,经常会有的情况是,第三方的jar,并没有发布到中央仓库。解决方案有:
1. 在工程下新建lib目录并将jar拖入,然后直接在pom.xml中引入:
<dependency>
<groupId>组织名</groupId>
<artifactId>唯一标识符</artifactId>
<scope>system</scope>
<version>版本号</version>
<systemPath>${basedir}\src\lib\包名.jar</systemPath>
</dependency>
</dependencies>
2. 安装该jar到本地仓库。cmd命令行输入:
mvn install:install-file -DgroupId=jar组织名 -DartifactId=jar标识符 -Dversion=版本号 -Dpackaging=jar -Dfile=jar包路径
然后在项目中引入:
<dependency>
<groupId>jar组织名</groupId>
<artifactId>jar标识符</artifactId>
<version>版本号</version>
</dependency>
3. 如果一个项目组十几个人,不能每个人都在本地装一次那个jar包吧?这个时候,就要考虑搭建Maven私服了。
4. 如果考虑把那个jar开源给所有人用,请参考我的这篇博客:https://blog.csdn.net/qq_28802119/article/details/85256852
5. POM文件
标准的Maven项目结构:
src文件夹中存放的是项目文件。pom.xml就是maven的核心了。下面就是一个标准的pom文件。
<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.0 http://maven.apache.org/xsd/maven4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.xiaoyudeguang</groupId>
<artifactId>easy-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>easy-test</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
POM全称是Project Object Model,直译的话就是项目对象模型,可以猜出来Maven是把我们的项目当做一个对象来处理了。确实如此,我们的项目信息在pom文件中定义好了。从上到下,依次是项目基本信息声明(组织名、唯一标识符、版本号、打包类型)、项目名称、项目地址、一些属性(比如编码格式)的定义、依赖jar包的声明。
需要注意的是,如果没有在pom.xml中显式声明父级pom(<parent>标签),项目pom.xml默认会继承一个父级pom来完成一些默认设置的继承(约定有限于配置)。<modelVersion>标签的值就是父级pom的版本号。
7. Maven常用命令
compile :编译;
test :测试;
clean : 清理编译后的文件;
package :打包;
install : 打包并上传到本地仓库;
deploy : 上传到远程仓库;
-Dmaven.test.skip=true : 跳过测试;
PS: 以上命令可以同时使用。
8.Maven指令的三套相互独立的生命周期
(1)Clean Lifecyle:在真正进行构建前进行一些清理工作(clean);
(2)Default LifeCyle:核心的构建部分,包括编译、测试、打包、部署等步骤(compile、test、package、install、deploy);
(3)Site LifeCyle:生成项目报告、站点、发布站点(site)。
PS:Maven管理声明周期过程都是基于插件完成的。
9. Maven的依赖范围
10. Maven插件
Maven实际上是一个依赖插件执行的框架,每个人物实际上是由插件完成的。Maven插件可以用来
插件有以下两种类型:
常用插件列表: