Maven的详解(Maven下载安装、idea的Maven配置、Maven生命周期、插件、Maven常见问题,POM等等)

什么是maven,有什么

Maven是一个项目构建和管理的工具,其主要服务于基于java平台的项目构建、依赖管理和项目信息管理。它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

maven的安装与配置

一、需要准备的东西
JDK,IDEA,Maven程序包
二、下载与安装
下载地址:http://maven.apache.org/download.cgi

下载指定文件
将指定文件下载到本地你需要放的位子,然后解压。

然后鼠标右键此电脑-----属性-----高级系统设置----环境变量
环境变量

在Path中
在这里插入图片描述

然后win+R键 输入cmd,弹出黑窗口

输入mvn -version
在这里插入图片描述
这就表示安装成功,有人会问你下载的版本号和安装的版本号不一样为什么啊,因为我电脑以前都有了,就没有安装最新的。

Maven的仓库

Maven 的仓库只有两大类
1、本地仓库。
2、远程仓库。在远程仓库中又分成了 3 种:

  • 中央仓库。
  • 私服。
  • 其它公共库。

settings.xml配置文件
当我们下载安装好Maven时,在其安装目录的conf下存在一个settings.xml的配置文件,这是一个全局的maven配置文件,为了不影响这台计算机上的其他用户,一般选择将该文件copy到 ~/.m2/下边,作为一个用户层面的配置文件
settings.xml文件中主要包含以下的元素:

localRepository:本地仓库的目录。默认是用户目录下面的.m2/repository目录
interactiveMode:表示是否使用交互模式,默认是true;如果设为false,那么当Maven需要用户进行输入的时候,它会使用一个默认值
offline:表示是否离线,默认是false。这个属性表示在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息
mirrors:定义一系列的远程仓库的镜像,用于缓解远程仓库的压力
profiles:用于指定一系列的profile
activeProfiles:指定当前正在活跃的profile
servers:表示当需要连接到一个远程服务器的时候需要使用到的验证方式。
配置下本地仓库,
在这里插入图片描述
配阿里云镜像

     <mirror>
            <id>nexus-aliyun</id>
            <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

idea如何maven配置

点击File选中Settings…
在这里插入图片描述
然后
在这里插入图片描述

Maven 常用命令

mvn archetype:create :创建 Maven 项目。
mvn compile :编译源代码。
mvn deploy :发布项目。
mvn test-compile :编译测试源代码。
mvn test :运行应用程序中的单元测试。
mvn site :生成项目相关信息的网站。
mvn clean :清除项目目录中的生成结果。
mvn package :根据项目生成的 jar/war 等。
mvn install :在本地 Repository 中安装 jar 。
mvn eclipse:eclipse :生成 Eclipse 项目文件。
mvn jetty:run 启动 Jetty 服务。
mvn tomcat:run :启动 Tomcat 服务。
mvn clean package -Dmaven.test.skip=true :清除以前的包后重新打包,跳过测试类。

用到最多的命令
mvn eclipse:clean :清除 Project 中以前的编译的东西,重新再来。
mvn eclipse:eclipse :开始编译 Maven 的 Project 。
mvn clean package :清除以前的包后重新打包。

maven的生命周期

Maven 中有三个独立的生命周期:

1、Clean
2、Default
3、Site

一个完整的项目构建过程通常包括清理、编译、测试、打包、集成测试、验证、部署等步骤,Maven 从中抽取了一套完善的、易扩展的生命周期。Maven 的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven 为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin 。用户也可自行配置或编写插件。

Maven有三套相互独立的生命周期,分别是 Clean、Default 和 Site。每个生命周期包含一些阶段,阶段是有顺序的,后面的阶段依赖于前面的阶段。

1、Clean 生命周期:清理项目,包含三个 phase

  • pre-clean:执行清理前需要完成的工作。
  • clean:清理上一次构建生成的文件。
  • post-clean:执行清理后需要完成的工作

2、Default 生命周期:构建项目,重要的 phase 如下:

  • validate:验证工程是否正确,所有需要的资源是否可用。
  • compile:编译项目的源代码。
  • test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
  • package:把已编译的代码打包成可发布的格式,比如 jar、war 等。
  • integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
  • verify:运行所有检查,验证包是否有效且达到质量标准。
  • install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
  • deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
    在这里插入图片描述
    3、Site 生命周期:建立和发布项目站点,phase 如下
  • pre-site:生成项目站点之前需要完成的工作
  • site:生成项目站点文档
  • post-site:生成项目站点之后需要完成的工作
  • site-deploy:将项目站点发布到服务器

各个生命周期相互独立,一个生命周期的阶段前后依赖。

mvn clean :调用 Clean 生命周期的 clean 阶段,实际执行 pre-clean 和 clean 阶段
mvn test :调用 Default 生命周期的 test 阶段,实际执行 test 以及之前所有阶段
mvn clean install :调用 Clean 生命周期的 clean 阶段和 Default 生命周期 的 install 阶段,实际执行 pre-clean 和 clean ,install 以及之前所有阶段。
在这里插入图片描述
clean :清理自动生成的文件,也就是 target 目录。
validate :验证 Maven 描述文件是否有效。
compile :编译 java 代码。
test :运行测试代码。
package :项目打成 jar、war 包等。
verify :验证构件包是否有效。
install :将构件包安装到本地仓库。
deploy :将构件包部署到远程仓库。
site :生成项目站点。

maven的插件

Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。插件通常提供了一个目标的集合,并且可以使用下面的语法执行:mvn [plugin-name]:[goal-name]

Maven 提供了下面两种类型的插件:
Build plugins :在构建时执行,并在 pom.xml 的 元素中配置。
Reporting plugins :在网站生成过程中执行,并在 pom.xml 的元素中配置。
下面为maven插件列表:
在这里插入图片描述
clean :构建之后清理目标文件。删除目标目录。
compiler :编译 Java 源文件。
surefile :运行 JUnit 单元测试。创建测试报告。
jar :从当前工程中构建 JAR 文件。
war :从当前工程中构建 WAR 文件。
javadoc :为工程生成 Javadoc 。
antrun :从构建过程的任意一个阶段中运行一个 ant 任务的集合

Maven 有哪些优点

  • 简化了项目依赖管理
  • 易于上手,对于新手可能一个 mvn clean package 命令就可能满足我们的工作
  • 便于与持续集成工具(Jenkins)整合
  • 便于项目升级,无论是项目本身升级还是项目使用的依赖升级
  • 有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更新,而不用自己去编译
  • Maven 有很多插件,便于功能扩展,比如生产站点,自动发布版本等。

Maven 坐标的含义

Maven 的 坐标(唯一标识) 元素包括 groupId、artifactId、version、packaging、classfier 。
groupId : 定义当前 Maven 项目隶属的实际项目。首先,Maven 项目和实际项目不一定是一对一的关系。
artifactId : 该元素定义当前实际项目中的一个 Maven 项目(模块)。推荐的做法是使用实际项目名称作为 artifactId 的前缀
version : 该元素定义了使用构件的版本
packaging : 定义 Maven 项目打包的方式,使用构件的什么包。打包方式通常与所生成构件的文件扩展名对应。如上例中没有 packaging ,则默认为 jar 。当然,也可以打包成 war 等。
classifier : 该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应。

上述 5 个元素中:
groupId、artifactId、version 是必须定义的。
packaging 是可选的(默认为 jar )。
而 classfier 是不能直接定义的,需要结合插件使用。

Maven 依赖的解析机制是怎么样的

解析发布(RELEASE)版本:如果本地有,直接使用本地的,没有就向远程仓库请求。
解析快照(SNAPSHOT)版本:合并本地和远程仓库的元数据文件 groupId/artifactId/version/maven-metadata.xml ,这个文件存的版本都是带时间戳的,将最新的一个改名为不带时间戳的格式供本次编译使用。
解析版本为 LATEST: 由于复杂,且解析的结果不稳定,不推荐在项目中使用,感兴趣的同学自己去研究,简而言之就是合并groupId/artifactId/maven-metadata.xml 找到对应的最新版本和包含快照的最新版本。LASTEST、RELEASE、SNAPSHOT 的区别
LASTEST :是指某个特定构件最新的发布版或者快照版(SNAPSHOT),最近被部署到某个特定仓库的构件
RELEASE :是指仓库中最后的一个非快照版本
SNAPSHOT :泛指。如果不 SNAPSHOT ,如果名字不变,本地有了不会从远程拉。如果每次更新都改名字,其他用的人也都改名字,太蛋疼
Maven 依赖原则?
1、赖路径最短优先原则。
2、pom文 件中申明顺序优先
3、覆写优
子 pom 内声明的优先于父 pom 中的依赖。

如何解决maven的jar冲突
遇到冲突的时候第一步,要找到 Maven 加载的到时是什么版本的 jar 包,通过们 mvn dependency:tree 查看依赖树,或者使用 IDEA Maven Helper 插件
然后,通过 Maven 的依赖原则来调整坐标在 pom 文件的申明顺序是最好的办法,或者使用将冲突中不想要的 jar 引入的 jar 进行 掉。

Maven POM

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等
执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

POM 中可以指定以下配置
项目依赖
插件
执行目标
项目构建 profile
项目版本
项目开发者列表
相关邮件列表信息
在创建 POM 之前,我们首先需要描述项目组 (groupId), 项目的唯一ID。

<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/maven-4.0.0.xsd">
    <!-- 模型版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId 
    <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
    <artifactId>project</artifactId> 
    <!-- 版本号 -->
    <version>1.0</version>
</project>

父(Super)POM
父(Super)POM是 Maven 默认的 POM。所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 包含了一些可以被继承的默认设置。因此,当 Maven 发现需要下载 POM 中的 依赖时,它会到 Super POM 中配置的默认仓库去下载。

Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的目标,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被重写。

使用以下命令来查看 Super POM 默认配置:mvn help:effective-pom

POM的详细注解http://maven.apache.org/pom.html

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值