Maven 仓库
- Maven中的仓库是用来存放maven构建的项目和各种依赖的(Jar包)。
Maven的仓库分类
- 本地仓库: 位于自己计算机中的仓库, 用来存储从远程仓库或中央仓库下载的插件和 jar 包,默认在当前用户下的.m2文件夹下
- 远程仓库: 需要联网才可以使用的仓库,阿里提供了一个免费的maven 远程仓库。
- 中央仓库: 在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件
配置阿里云远程仓库
-
Maven默认的远程仓库是在国外, 所以下载jar包时速度会非常慢,为提升下载依赖的速度,可以使用阿里云的仓库
-
在maven安装目录中,进入 conf文件夹, 可以看到一个 settings.xml 文件,打开 settings.xml,找到
<mirror>
标签 , 下面的内容复制到中即可<mirror> <id>alimaven</id> <name>aliyun maven</name> <url> http://maven.aliyun.com/nexus/content/groups/public/ </url> <mirrorOf>central</mirrorOf> </mirror>
Maven-POM
- 每个maven工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的信息、项目依赖、引入插件等等。
- pom.xml 代表工程对象模型,是Maven工作时的基本组件,pom.xml 文件被放在工程根目录下
- pom.xml中包含了关于工程和各种配置细节的信息,Maven使用这些信息构建工程
- 一个Maven工程就是由 groupId , artifactId 和 version 作为唯一标识,在引用其他第三方库的时候,也是通过这3个变量确定。
- 在maven中坐标就是为了定位一个唯一确定的jar包。
- maven 的依赖管理, 是对项目所依赖的 jar 包进行统一管理。
Maven主要标签
标签 | 含义 |
---|---|
groupId | 定义当前Maven组织名称,通常是公司名 |
artifactId | 定义实际项目名称 |
version | 定义当前项目的当前版本 |
packaging | 打包类型,jar:执行 package 会打成 jar 包 war:执行 package 会打成 war 包 |
dependency | 使用 <dependency> 声明一个依赖后,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/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
</project>
- groupId: 这是工程组的标识。它在一个组织或者项目中通常是唯一的。
- artifactId:这是工程的标识。它通常是工程的名称
- version:这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。
Maven编译插件
<!-- properties 是全局设置,可以设置整个maven项目的编译器 JDK版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 重点 -->
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!-- 在build中 需要指定一下项目的JDK编译版本,maven默认使用1.5版本进行编译注意 build 与 dependencies是平级关系,标签不要写错位置 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>
Super POM:
- 所有的POM都继承自一个父POM(无论是否显式定义了这个父PO),父POM也被称为Super POM,包含一些可以被继承的默认设置
- Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的目标,帮助我们在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。
- 查看 Super POM 默认配置命令:
mvn help:effective-pom
Maven 生命周期
-
maven项目生命周期:使用 maven 完成项目的构建包括:清理、编译、测试、部署等过程,maven 将这些过程规范为一个生命周期,如下所示是生命周期的各各阶段:
命令 说明 mvn compile 完成编译操作 , 执行完毕后,会生成target目录,该目录中存放了编译后的字节码文件。 mvn clean 执行完毕后,会将target目录删除. mvn test 执行完毕后,会在target目录中生成三个文件夹:surefire、surefire-reports(测试报告)、test-classes(测试的字节码文件)。 mvn package 完成打包操作, 执行完毕后,会在target目录中生成一个文件,该文件可能是jar、war。 mvn install 执行 mvn install命令,完成将打好的jar包安装到本地仓库的操作执行完毕后,会在本地仓库中出现安装后的jar包,方便其他工程引用 -
idea中安装好maven后, 在界面左侧有一个maven视图, 里面有对应的命令插件,可以执行上面表格中的命令
IDEA中Maven插件的工具栏
- 根据pom.xml文件重新导入所有Maven项目和依赖,刷新
- 创建源码(重新编译)并更新目录
- 下载源码或文档
- 添加Maven项目
- 执行生命周期中的阶段,选中lifecycle选项中生命周期中的一个阶段(phase),才能点击执行。
- 运行Maven生命周期或插件
- 切换离线模式,就是关闭和远程仓库的链接,从本地仓库中获取,也不能将jar包提交到远程仓库
- 是否跳过测试,点击选中就可以跳过测试,在点击选择取消跳过测试
- 展示当前选中的maven项目jar包的依赖,并且可以直接在图形化依赖图上进行排除依赖操作
- 收起下面展开的视图
- 跳转到maven的Setting页面
依赖范围
- 若A模块 依赖 B模块,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围,依赖范围包括:
依赖范围 | 说明 |
---|---|
compile | 编译范围,指 A在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。 |
provided | provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。 |
runtime | runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。 |
test | test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以test范围依赖不会被打包。 |
system | system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。 |