Maven基础
1、maven是什么?
1.1、两大核心
- 依赖管理:对 jar 的统一管理(Maven 提供了一个 Maven 的中央仓库,https://mvnrepository.com/,当我们在项目中添加完依赖之后,Maven 会自动去中央仓库下载相关的依赖,并且解决依赖的依赖问题)
- 项目构建:对项目进行编译、测试、打包、部署、上传到私服等
1.2、Maven的标准工程目录结构
.工程名
|-- pom.xml(maven的核心配置文件)
|-- src
| |-- main
| | |-- java(java源代码目录)
| | └-- resources(资源文件目录)
| |-- test
| └-- java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)
└--classes(编译后的class文件存放处)
2、Maven配置
2.1、仓库类型
| 仓库类型 | 说明 |
|---|---|
| 本地仓库 | 当前使用的电脑上的仓库,每个人电脑上都有一个仓库,默认位置在 当前用户名\.m2\repository |
| 私服仓库 | 公司内部搭建的 Maven 私服,处于局域网中,访问速度较快,这个仓库中存放的 jar 一般就是公司内部自己开发的 jar |
| 中央仓库 | 有 Apache 团队来维护,包含了大部分的 jar(https://mvnrepository.com/),一般修改成国内的镜像仓库 |
Maven项目下载Jar的流程如下图

2.2、本地仓库配置
本地仓库默认位置在 当前用户名\.m2\repository,这个位置可以自定义,在 conf/settings.xml 中自定义本地仓库位置:
<settings>
<localRepository>F:/repo/repository</localRepository>
</settings>
2.3、中央仓库配置
默认中央仓库下载较慢,这里改为阿里巴巴仓库地址,在
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://repo1.maven.org/maven2/</url>
</mirror>
2.4、私服仓库配置
假设公司私服仓库地址是:https://repo.spring.io/ui/native/libs-milestone/,则配置如下:
<repositories>
<repository>
<id>spring</id>
<url>https://repo.spring.io/ui/native/libs-milestone/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring</id>
<url>https://repo.spring.io/ui/native/libs-milestone/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
再有一个私服地址:http://repo.spring.io/plugins-release/时的配置如下:
<repositories>
<repository>
<id>spring</id>
<url>https://repo.spring.io/ui/native/libs-milestone/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-plugin</id>
<url>http://repo.spring.io/plugins-release/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring</id>
<url>https://repo.spring.io/ui/native/libs-milestone/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-plugin</id>
<url>http://repo.spring.io/plugins-release/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
3、maven的使用
3.1、常用maven命令
- mvn clean:清理
- mvn compile:编译主程序
- mvn test-compile:编译测试程序
- mvn test:执行测试
- mvn package:打包
- mvn install:安装
- mvn deploy: 上传
4、依赖
4.1、依赖项目
-
对于本地仓库中没有的会去中央仓库去查找maven坐标来获取jar包,获取到jar之后会下载到本地仓库
-
对于中央仓库也找不到依赖的jar包的时候,就会编译失败了
如果依赖的是自己或者团队开发的maven工程,需要先使用install命令把被依赖的maven工程的jar包导入到本地仓库中
4.2、依赖范围
<!--依赖举例-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.13.RELEASE</version>
</dependency>
| 依赖范围 | 依赖传递 | 编译有效 | 测试有效 | 运行时有效 | 打包有效 |
|---|---|---|---|---|---|
| complie | √ | √ | √ | √ | √ |
| test | × | × | √ | × | × |
| runtime | √ | × | √ | √ | √ |
| provided | × | √ | √ | × | × |
| system | × | √ | √ | × | × |
4.2.1、scope中import的作用
import:导入依赖范围。该范围的依赖只在dependencyManagement标签才有效。它的作用是将目标pom的dependencyManagement标签中的依赖,合并到当前pom的dependencyManagement标签内,供引用项目中使用。由于import依赖的特殊性,一般看到import范围时,就会存在
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.13.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
4.2.2、optional的作用
optional是maven依赖jar时的一个选项,表示该依赖是可选的.不会被依赖传递
应用场景:项目A依赖项目B,项目B依赖项目C时
<!--项目B依赖项目C-->
<dependency>
<groupId>learn</groupId>
<artifactId>leann-C</artifactId>
<version>0.0.1-SNAPSHOT</version>
<optional>true</optional>
</dependency>
当项目B的
本文来自博客园,作者:cxbks,转载请注明原文链接:https://www.cnblogs.com/cxbks-write-down/articles/15896783.html
浙公网安备 33010602011771号