Maven安装与配置,idea集成maven,和基本使用
maven基本使用
- 什么是MAVEN
- 安装与配置
- 下载
- 配置环境变量
- MAVEN_HOME
- M2_HOME
- path
- 运行命令mvn -v 检测是否配置成功
- 修改配置
- 建立本地仓库
- 更换阿里云镜像
- 配置jdk,也要夹在两个profiles标签之间
- 配置完后在命令行输入mvn help:system测试,看到下载链接里面是ailiyun的链接表示配置成功
- 配置说明
- 全局配置和局部配置
- MAVEN命令的使用
- mvn compile
- mvn package
- mvn install
- mvn clean
- idea集成maven
- 修改其他新项目
- MAVEN核心概念
- 坐标
- 坐标的组成
- 管理依赖
- 依赖传递
- 依赖冲突
- 依赖排除
- 可选依赖
- 继承和聚合
- 依赖管理器
- Maven的仓库
- Maven仓库的分类
什么是MAVEN
MAVEN是基于POM(工程对象模型),通过一小段描述来对项目的代码、文件进行管理的工具。简单的说就是管理我们项目中依赖的包之间的关系。
MAVEN是一个跨平台的项目管理工具,它是使用java开发的,依赖于JDK1.6及以上。
Maven主要2大功能:管理依赖(jar包管理)、项目构建
安装与配置
下载
maven官网链接
下载完成后,选择一个路径解压
配置环境变量
右键点击此电脑,点击高级系统设置
直接点击新建
配置如下配置:
- M2_HOME maven目录下的bin目录
- MAVEN_HOME maven的目录
- 在系统的path中配置 %MAVEN_HOME%\bin
MAVEN_HOME
MAVEN_HOME = D:\Maven\apache-maven-3.6.3
M2_HOME
这个不配置好像也可以但是我看的狂神的视频说不配置后面有可能报错
M2_HOME=D:\Maven\apache-maven-3.6.3\bin
path
%MAVEN_HOME%\bin
运行命令mvn -v 检测是否配置成功
然后win+R 运行cmd 输入 mvn -v
修改配置
找到直接解压的目录 D:\Maven\apache-maven-3.6.3\conf下可以找到settings文件
建立本地仓库
这里设置的路径是我们本地仓库的位置,管理的所有的jar包的目录。不配置默认的本地仓库路径为 ${user.home}/.m2/repository 。由于时间久了这个目录很占空间,这个默认路径在C盘,所以建议配置在非C盘路径下
首先新建一个maven-repo文件夹
在53行左右复制出来修改为
<localRepository>D:\Maven\apache-maven-3.6.3\maven-repo</localRepository>
更换阿里云镜像
国外的服务器下载的很慢我们换成国内的源这里有3种写法好像都可以
在150行左右
<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>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>central repo</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>apache snapshots</mirrorOf>
<name>阿里云阿帕奇仓库</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
注意要放在两个mirrors标签之间
配置jdk,也要夹在两个profiles标签之间
190行左右
<!-- java版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<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>
</profile>
配置完后在命令行输入mvn help:system测试,看到下载链接里面是ailiyun的链接表示配置成功
Maven是在settings.xml文件中进行配置。
配置说明
全局配置和局部配置
settings.xml文件一般存在于两个位置:
- 全局配置: ${MAVEN_HOME}/conf/settings.xml
- 用户配置: 用户目录/.m2/settings.xml
需要注意的是:局部配置优先于全局配置。
配置优先级从高到低:pom.xml> user settings > global settings
如果这些文件同时存在,会合并配置内容,如果有重复的配置,优先级高的配置会覆盖优先级低的
MAVEN命令的使用
mvn compile
对项目进行编译,代码生成的文件都在target目录。
mvn package
对项目进行打包。java项目打成jar包,web项目打成war包,在pom文件中可以配置。
mvn install
对项目进行安装,把打包好的内容安装到本地仓库。
如果没有执行compile test package命令直接执行install命令则会默认先把compile、test、package执行一遍先。
mvn clean
对项目进行安装,把打包好的内容安装到本地仓库。
如果没有执行compile test package命令直接执行install命令则会默认先把compile、test、package执行一遍先。
idea集成maven
下面我们将在IDEA中配置Maven,这样我们就能在IDEA中创建Maven项目了
点击File菜单 -> Settings -> Build Tools 找到Maven
主要配置:
- Maven home directory 可以配置Maven所在的目录
- User settings file 是配置文件的路径
- Local repository 是本地仓库的路径
如果不配置会默认配置到idea自己默认的路径可能会都下在c盘了
当然光是这样,只能在当前项目里面改了,下一次再创建新的项目时,会发现还是默认的maven路径
修改其他新项目
不同版本的idea可能这里有点不一样,老版的好像是settings for others
然后重复刚才上面的配置即可
MAVEN核心概念
坐标
maven仓库中存放跟管理了大量的项目构建,在maven中坐标是为了定位一个唯一确定的包。我们在仓库中要找到我们需要的目标,只要知道目标的坐标即可。
坐标的组成
groupId: 定义当前的Maven组织名称
artifactId: 定义实际项目名称
version: 定义当前项目版本号
简称GAV坐标,在pom.xml文件中的配置如下:
<groupId>com.blb.seven</groupId><!-- 组织名 -->
<artifactId>Hello</artifactId><!-- 项目名 -->
<version>0.0.1-SNAPSHOT</version><!-- 版本号 -->
管理依赖
在maven项目中,最重要的文件是pom.xml文件,所有的配置都在此文件中,包括最重要的依赖管理。每一个依赖都在dependencies标签下,通过GAV坐标引入我们需要的依赖。例子如下
<dependency>
<groupId>junit</groupId> <!-- 组织名 -->
<artifactId>junit</artifactId><!-- 项目名 -->
<version>4.11</version><!-- 版本号 -->
<scope>test</scope><!-- 范围 -->
</dependency>
在这个例子中除了GAV坐标以外,还有一个scope表示依赖的范围。
依赖范围(scope) | 对主代码有效 | 对测试代码有效 | 打包运行时有效 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | log4j |
test | - | Y | - | junit |
provided | Y | Y | - | servlet-api |
runtime | - | - | Y | jdbc Driver |
system | Y | Y | - |
依赖传递
有项目A、B、C。A依赖项目B,B依赖项目C,则A会间接依赖C中的所有依赖。A->B称为第一直接依赖,B->C称为第二直接依赖,A对于C是传递性依赖。
tip:
依赖不能形成闭环,比如A->B, B->C, C->A
依赖冲突
在同一个pom文件中,如果存在2个冲突的依赖的话,采取的后面覆盖前面的原则。如
junit
junit
4.7
test
junit
junit
4.8
test
在不同的pom文件中,如果存在2个冲突的依赖的话,先采用路径最短原则,路径相同再采用最先声明优先原则。
比如:A->B->C->X(1.0), A->D->X(2.0),1.0版本的X跟2.0版本的X都会传递到A,那么A究竟会使用哪个版本呢?前面A到X(1.0)路径是3,后面A到X(2.0)路径是2,所以采用路径最短原则,使用X(2.0)。
那么当路径相同时, A->B->Y(1.0), A->C->Y(2.0),Y(1.0)跟Y(2.0)到A的路径都是2,那么采用谁声明靠前就使用哪个版本的Y
依赖排除
当我们项目A依赖B,B依赖10个jar,则A间接依赖这10个jar,此时当我们依赖B的时候可以定义这10个jar中的哪些排除在外,不要依赖。这就叫做排除依赖。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.4.RELEASE</version>
<!-- 将依赖传递过来的spring-jcl排除在外 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-jcl</artifactId>
</exclusion>
</exclusions>
</dependency>
可选依赖
当我们项目A依赖B,B依赖10个jar,则A间接依赖这10个jar,此时当项目B被依赖的时候可以定义哪些不给项目A依赖。这叫做可选依赖。
可选依赖跟依赖排除的区别是:可选依赖是我不给,依赖排除是我不要
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8</version>
<!-- 这个选项默认是false,设置true以后表示这个依赖不传递给其他依赖 -->
<optional>true</optional>
</dependency>
继承和聚合
POM项目对象模型把项目以面向对象的方式管理,项目之间可以有继承、聚合这些特性。
继承,项目之间可以继承,子项目可以继承父项目的依赖和插件
子项目的pom.xml中用parent继承父项目,父项目的打包方式必须是pom
<parent>
<artifactId>父项目artifactId</artifactId>
<groupId>父项目groupId</groupId>
<version>父项目version</version>
</parent>
聚合,一个项目可以把多个项目整合到一起打成一个包,部署到一起,聚合项目用modules配置被聚合的项目
<modules>
<module>项目1</module>
<module>项目2</module>
</modules>
继承和聚合一般一起使用,我们可以在一个大项目中创建多个子项目以完成不同的业务,子项目继承父项目,父项目聚合所有子项目
依赖管理器
当子项目继承父项目则默认继承父项目所有的依赖,子项目很被动。子项目能不能选择性的接受呢?当然可以,只需要把父项目中的依赖都放入依赖管理器中即可,如
<!-- 父项目,把依赖放入依赖管理器中,这样子项目默认不继承任何依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
- dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。
- 如果不在子项目中声明依赖,是不会从父项目中继承下来的;
- 只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;
- 另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本
Maven的仓库
Maven仓库的分类
Maven仓库分为:
- 本地仓库
在本机保存jar包的目录 - 远程仓库
自己搭建的服务器,用于保存jar包文件,以提高jar下载速度和安全性 中央仓库
由maven团队维护的服务器,保存大量jar包地址:https://repo1.maven.org 、 https://repo2.maven.org
这三种仓库工作的流程是:
当项目需要某个jar包时,先从本地仓库查找,如果有就返回,如果没有就到远程仓库查询,如果找到就返回jar包并保存到本地仓库,如果还没找到就到中央仓库查找,如果找到了就保存到远程仓库和本地仓库中,如果没有就查找失败了
还没有评论,来说两句吧...