这是我参与「第四届青训营 」笔记创作活动的第8天。
随着java广泛应用,可使用的jar包越来越多,传统的jar包下载方式显得越来越繁琐,且不易管理。因此,Maven诞生了。
什么是Maven
简单来说,maven是一款服务于java平台的自动化构建工具。
构建定义:把动态的Web工程经过编译得到的编译结果部署到服务器上的整个过程。
下载官网: maven.apache.org/download.cg… 下载完成后需要把bin目录地址配置到系统环境变量。 且可以更该包下载源,替换成阿里云镜像网站:
找到配置文件,在安装目录的conf文件下可以找到settings文件。
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
Maven常用命令
-v:查询Maven版本
本命令用于检查maven是否安装成功。 Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。
compile:编译
将java源文件编译成class文件
test:测试项目
执行test目录下的测试用例
package:打包
将项目打成jar包
clean:删除target文件夹
install:安装
将当前项目放到Maven的本地仓库中。供其他项目使用
Maven仓库
Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。
- 本地仓库:Maven本地的Jar包仓库。
- 中央仓库: Maven官方提供的远程仓库。 当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。
坐标
在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。 如下代码中,groupId和artifactId构成了一个Jar包的坐标。
<dependency>
<groupId>cn.missbe.web.search</groupId>
<artifactId>resource-search</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
</dependency>
- groupId:所需Jar包的项目名
- artifactId:所需Jar包的模块名
- version:所需Jar包的版本号
pom.xml文件简单介绍
pom.xml文件为java项目配置Maven的管理文件,所有与Maven有关设置在此文件中定义。
根路径project
<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.0http://maven.apache.org/maven-v4_0_0.xsd">
一些xml文件配置,主要是命名空间。
父项目
<parent>
<!--被继承的父项目的构件标识符-->
<artifactId/>
<!--被继承的父项目的全球唯一标识符-->
<groupId/>
<!--被继承的父项目的版本-->
<version/>
</parent>
springboot项目就是从父项目继承。
项目信息
<modelVersion>4.0.0</modelVersion>
<groupId>cn.missbe.web</groupId>
<artifactId>search-resources</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>search-resources</name>
- modelVersion 声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此, 但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。
- groupId 项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app
- artifactId 构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西。
- packaging 项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型。
- version 项目当前版本,格式为:主版本.次版本.增量版本-限定版本号
- name 项目的名称, Maven产生的文档用
依赖配置
导入jar包主要修改属性
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>3.8.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
</dependencies>
- version 依赖的版本号。 在Maven 2里, 也可以配置成版本号的范围。
- type 依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外 。一个类型可以被映射成另外一个扩展名或分类器。类型经常和使用的打包方式对应, 尽管这也有例外。一些类型的例子:jar,war,ejb-client和test-jar。 如果设置extensions为 true,就可以在 plugin里定义新的类型。
- scope 依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。
- compile :默认范围,用于编译
- provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
- runtime: 在执行时需要使用
- test: 用于test任务时使用
- system: 需要外在提供相应的元素。通过systemPath来取得
- systemPath: 仅用于范围为system。提供相应的路径
- optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用
总结
Maven的出现,极大的简便了java项目导入包的操作,且更有利于管理。