一、Maven仓库
1.1 三种类型Maven仓库
本地(local)
本地仓库是机器上的一个文件夹,它在你第一次运行任何 maven 命令的时候创建,当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。
Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf
目录中的 Maven 的 settings.xml 文件中定义另一个路径。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:/MyLocalRepository</localRepository>
</settings>
中央(central)
中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
- 这个仓库由 Maven 社区管理。
- 不需要配置。
- 需要通过网络才能访问。
要浏览中央仓库的内容,maven 社区提供了一个 URL:Http://search.maven.org/#browse
。使用这个仓库,开发人员可以搜索所有可以获取的代码库。
远程(remote)
如果 Maven 在中央仓库中也找不到依赖的库文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
1.2 Maven依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
- 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
- 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中已被将来引用。
- 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
- 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
1.3 外部依赖
当然,如果在远程仓库和中央仓库中,依然无法找到依赖,也可以通过外部依赖解决,即在你自己的本地工程中添加 lib 文件夹,复制任何 jar 文件到 lib 文件夹下,将这个外部依赖添加到对应的pom.xml 中,添加依赖时使用<systemPath>
指定路径。
<dependencies>
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
</dependency>
</dependencies>
- 外部依赖(library jar location)能够像其他依赖一样在 pom.xml 中配置。
- 指定 groupId 为 library 的名称。
- 指定 artifactId 为 library 的名称。
- 指定作用域(scope)为system。
- 指定相对于工程位置的系统路径。
二、Maven的构建过程
Maven的构建步骤:
-
解析POM文件:Maven会读取项目根目录下的pom.xml文件,并解析其中的配置信息,包括依赖库、插件、构建配置等。
-
下载依赖库:Maven会根据pom.xml文件中声明的依赖库信息,从Maven仓库或其他远程仓库中下载依赖库,并存储到本地仓库中。如果本地仓库中已经存在相应的依赖库,则不会再次下载。
-
执行构建插件:Maven会根据pom.xml文件中声明的构建插件,执行相应的构建任务,例如编译Java代码、运行测试、打包等。
-
打包:Maven会根据pom.xml文件中声明的打包方式,将构建结果打包成相应的格式,例如JAR、WAR等。
-
安装到本地仓库:Maven会将打包结果安装到本地仓库中,以便其他项目可以引用。
-
部署到远程仓库:如果需要将构建结果部署到远程仓库中,Maven会根据pom.xml文件中声明的仓库信息,将构建结果上传到远程仓库中。
Maven的构建原理是基于POM文件和插件机制。在执行构建过程中,Maven会根据pom.xml文件中声明的插件,执行相应的构建任务。通过插件机制,Maven可以支持各种不同的构建任务,例如编译Java代码、运行测试、打包等。Maven提供了一些常用的构建插件,例如Maven Compiler Plugin、Maven Surefire Plugin等,同时也支持自定义插件。
Maven的构建过程是基于Java虚拟机的。Maven本身是用Java语言编写的,因此在运行Maven时需要先启动Java虚拟机。在执行构建过程中,Maven会调用Java编译器、JUnit测试框架等Java工具和库。
但Maven不仅仅对Java虚拟机打包工程的一种包装,它是一个基于项目对象模型(Project Object Model,POM)的构建工具,可以管理项目的依赖、构建、测试、打包等各个方面,其功能在于:
-
依赖管理:Maven可以自动下载和管理项目所依赖的库文件,避免手动下载和管理依赖库的麻烦。
-
构建管理:Maven可以自动执行项目的构建过程,包括编译、测试、打包等,避免手动执行构建过程的繁琐。
-
插件管理:Maven提供了丰富的插件,可以扩展和定制项目的构建过程,例如执行代码质量检查、生成文档等。
-
多模块管理:Maven可以管理多个模块的依赖关系,方便管理大型项目。
-
统一构建:Maven可以统一管理项目的构建过程,使得不同项目的构建过程更加一致和规范。