本教程将介绍如何使用Maven在Java开发,或任何其他的编程语言的任何项目。
Maven是什么?
Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
Maven提供了开发人员的方式来管理:
Builds
Documentation
Reporting
Dependencies
SCMs
Releases
Distribution
mailing list
概括地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务。
Maven历史
Maven最初设计,是以简化Jakarta Turbine项目的建设。在几个项目,每个项目包含了不同的Ant构建文件。 JAR检查到CVS。
Apache组织开发Maven可以建立多个项目,发布项目信息,项目部署,在几个项目中JAR文件提供团队合作和帮助。
Maven目标
Maven主要目标是提供给开发人员:
项目是可重复使用,易维护,更容易理解的一个综合模型。
插件或交互的工具,这种声明性的模式。
Maven安装和配置
- Maven下载
- Maven安装
Maven资源库
Maven 位置,中央和远程存储库配置和解释,有些术语可能需要在 Maven 使用前理解。
- Maven本地资源库
Maven的本地资源库是用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹。很简单,当你建立一个Maven项目,所有相关文件将被存储在你的Maven本地仓库。
默认情况下,Maven的本地资源库默认为 .m2 目录文件夹:
- Unix/Mac OS X – ~/.m2
- Windows – C:\Documents and Settings\{your-username}\.m2
更新Maven本地资源库
通常情况下,可改变默认的 .m2 目录下的默认本地存储库文件夹到其他更有意义的名称,例如, maven-repo
找到 {M2_HOME}\conf\setting.xml, 更新 localRepository 到其它名称。
{M2_HOME}\conf\setting.xml<settings><!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ~/.m2/repository <localRepository>/path/to/local/repo</localRepository> --><localRepository>F:\apache-maven\repository</localRepository>
Maven中央存储库
当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载。首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 – http://repo1.maven.org/maven2/ 查找下载。
Maven 的中央资源库网站是这样的:
Maven中心储存库网站已经改版本,目录浏览可能不再使用。这将直接被重定向到 http://search.maven.org/。这就好多了,现在有一个搜索功能:
PS:目录浏览功能被禁用,但是,当你建立 Maven 的项目,它仍然会从 “http://repo1.maven.org/maven/” 得到依赖, 您可以从 Maven 验证输出。
根据 Apache Maven 的说明:
Downloading in Maven is triggered by a project declaring a dependency that is not present in the local repository (or for a SNAPSHOT, when the remote repository contains one that is newer). By default, Maven will download from the central repository.
在Maven中,当你声明的库不存在于本地存储库中,也没有不存在于Maven中心储存库,该过程将停止并将错误消息输出到 Maven 控制台。
org.jvnet.localizer 只适用于 Java.net资源库
<dependency> <groupId>org.jvnet.localizer</groupId> <artifactId>localizer</artifactId> <version>1.8</version> </dependency>声明Java.net资源库
告诉 Maven 来获得 Java.net 的依赖,你需要声明远程仓库在 pom.xml 文件这样:
<repositories> <repository> <id>java.net</id> <url>https://maven.java.net/content/repositories/public/</url> </repository> </repositories>
现在,Maven的依赖库查询顺序更改为:
- 在 Maven 本地资源库中搜索,如果没有找到,进入第 2 步,否则退出。
- 在 Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出。
- 在java.net Maven的远程存储库搜索,如果没有找到,提示错误信息,否则退出。
Maven依赖机制
- 你需要知道 log4j 的 Maven 坐标,例如:
<groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version>
它会自动下载 log4j 的1.2.14 版本库。如果“version”标签被忽略,它会自动升级库时当有新的版本时。
- 声明 Maven 的坐标转换成 pom.xml 文件。
<dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> </dependencies>
- 当 Maven 编译或构建,log4j 的 jar 会自动下载,并把它放到 Maven 本地存储库
- 所有由 Maven 管理
当建立一个Maven的项目,pom.xml文件将被解析,如果看到 log4j 的 Maven 坐标,然后 Maven 按此顺序搜索 log4j 库:
- 在 Maven 的本地仓库搜索 log4j
- 在 Maven 中央存储库搜索 log4j
- 在 Maven 远程仓库搜索 log4j(如果在 pom.xml 中定义)
Maven 依赖库管理是一个非常好的工具,为您节省了大量的工作。
如何找到 Maven 坐标?
访问 Maven 中心储存库,搜索下载您想要的jar。