Apache Maven是一个软件项目管理工具。基于项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建、报告和文档。
概括地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务。
Maven的本地资源库用来存储所有项目的依赖关系(插件、jar和其他文件,这些文件被Maven下载到本地文件夹)。很简单,当你建立一个Maven项目,所有相关文件将被存储在你的Maven本地仓库。
默认情况下,Maven的本地资源库默认为 .m2 目录文件夹:
建立一个 Maven 的项目时,Maven 会检查项目的 pom.xml 文件,以确定哪些依赖下载。首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库查找下载。
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
现在中央存储库被重定向到了 http://search.maven.org/ ,这里可以搜索相应的资源进行下载。
在Maven中,当声明的库不存在于本地存储库中,也不存在于Maven中心储存库,该过程将停止并将错误消息输出到 Maven 控制台。
如果项目依赖的jar包等不在中央存储库而在某个远程存储库,需要在pom.xml中指定该库以告诉Maven去相应远程库中搜索。
<repositories>
<repository>
<id>java.net</id>
<url>https://maven.java.net/content/repositories/public/</url>
</repository>
</repositories>
现在,Maven的依赖库查询顺序更改为:
POM代表项目对象模型。它是 Maven 中工作的基本单位,这是一个 XML 文件。 部分可以在 POM 使用的配置如下:
每个项目只有一个POM文件。
节点 | 描述 |
---|---|
groupId | 这是项目组的编号,这在组织或项目中通常是独一无二的。 |
artifactId | 这是项目的ID。这通常是项目的名称。 |
version | 这是项目的版本。 |
示例:
<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>
<groupId>com.helloworld.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<project>
我们知道,在传统方式下如果要引入一个jar包,过程是:
下载jar包 -> 将jar包复制到项目类路径下 -> 将其添加到项目依赖
使用Maven,只需要将需要的jar包配置到pom.xml中。当Maven编译或构建时相应的jar包会自动下载,并把它放到本地仓库。所有的jar包由Maven管理。
问:如何确定想要的jar包的groupId、artifactId和version? 答:mvnrepository.com 这个网站可以获取需要的jar包的配置。
Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的。Maven 插件通常用于:
Maven 提供以下两种类型插件:
类型 | 描述 |
---|---|
构建插件 | 在生成过程中执行,并在 pom.xml 中的<build/> 元素进行配置 |
报告插件 | 在网站生成期间执行,在 pom.xml 中的 <reporting/> 元素进行配置 |
示例(在项目中引入Tomcat插件):
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
</configuration>
</plugin>
</plugins>