Maven项目管理工具:Maven仓库(本地仓库+远程仓库)

在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称为构件。

Maven在某个统一的位置存储所有项目的构件,这个统一的位置,我们就称之为仓库。换言之,仓库就是存放依赖和插件的地方。

任何的构件都有唯一的坐标,该坐标定义了构件在仓库中的唯一存储路径。当Maven项目需要某些构件时,只要其POM文件中声明了这些构件的坐标,Maven就会根据这些坐标找自动到仓库中找到并使用它们。

项目构建完成生成的构件,也可以安装或者部署到仓库中,供其他项目使用。

仓库的分类

Maven仓库可以分为2个大类:

本地仓库

远程仓库

当Maven根据坐标寻找构件时,它会首先查看本地仓库,若本地仓库存在此构件,则直接使用;若本地仓库不存在此构件,Maven就会去远程仓库查找,若发现所需的构件后,则下载到本地仓库使用。如果本地仓库和远程仓库都没有所需的构件,则Maven就会报错。

远程仓库还可以分为3个小类:中央仓库、私服、其他公共仓库。

中央仓库是由Maven社区提供的一种特殊的远程仓库,它包含了绝大多数流行的开源构件。在默认情况下,当本地仓库没有Maven所需的构件时,会首先尝试从中央仓库下载。

私服是一种特殊的远程仓库,它通常设立在局域网内,用来代理所有外部的远程仓库。它的好处是可以节省带宽,比外部的远程仓库更加稳定。

除了中央仓库和私服外,还有很多其他公共仓库,例如JBossMaven库,Java.netMaven库等等。

Maven仓库的分类如下图。

由于私服在实际开发中十分的常用,也特别重要,因此本节只稍做介绍,关于Maven私服的详细介绍请阅读Maven私服。

本地仓库

Maven本地仓库实际上就是本地计算机上的一个目录(文件夹),它会在第一次执行Maven命令时被创建。

Maven本地仓库可以储存本地所有项目所需的构件。当Maven项目第一次进行构建时,会自动从远程仓库搜索依赖项,并将其下载到本地仓库中。当项目再进行构建时,会直接从本地仓库搜索依赖项并引用,而不会再次向远程仓库获取。

Maven本地仓库默认地址为C:\%USER_HOME%\.m2\repository,但出于某些原因(例如C盘空间不够),我们通常会重新自定义本地仓库的位置。这时需要修改%MAVEN_HOME%\conf目录下的settings.xml文件,通过localRepository元素定义另一个本地仓库地址,例如:

<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>D:/myRepository/repository</localRepository>
</settings>123456复制代码类型:[java]

构件只有储存在本地仓库中,才能被其他的Maven项目使用。构件想要进入本地仓库,除了从远程仓库下载到本地仓库外,还可以使用命令mvninstall将本地项目的输出构件安装到本地仓库中。

中央仓库

中央仓库是由Maven社区提供的一种特殊的远程仓库,它包含了绝大多数流行的开源构件。在默认情况下,当本地仓库没有Maven所需的构件时,会首先尝试从中央仓库下载。

中央仓库具有如下特点:

这个仓库由Maven社区管理

不需要配置

需要通过网络才能访问

我们可以通过Maven社区提供的URL:http://search.maven.org/#browse,浏览其中的构件。中央仓库包含了绝大多数流行的开源Java构件及其源码、作者信息和许可证信息等。一般来说,Maven项目所依赖的构件都可以从中央仓库下载到。

虽然中央仓库属于远程仓库的范畴,但由于它的特殊性,一般会把它与其他远程仓库区分开。我们常说的远程仓库,一般不包括中央仓库。

远程仓库

如果Maven在本地仓库和中央仓库中都找不到依赖的库文件,它就会停止构建过程并输出错误信息到控制台。为避免这种情况的发生,Maven还提供了远程仓库的概念,它是一种由开发人员自己定制的仓库,其中包含了供其他项目使用的代码库或者构件。

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>net.biancheng.www</groupId>
 <artifactId>maven</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <dependencies>
  <dependency>
   <groupId>com.bangcheng.common-lib</groupId>
   <artifactId>common-lib</artifactId>
   <version>1.0.0</version>
  </dependency>
 </dependencies>
 <repositories>
  <repository>
   <id>bianchengbang.lib1</id>
   <url>http://download.bianchengbang.org/maven2/lib1</url>
  </repository>
  <repository>
   <id>bianchengbang.lib2</id>
   <url>http://download.bianchengbang.org/maven2/lib2</url>
  </repository>
 </repositories>
</project>12345678910111213141516171819202122232425复制代码类型:[java]

Maven依赖搜索顺序

当通过Maven构建项目时,Maven按照如下顺序查找依赖的构件。

1、从本地仓库查找构件,如果没有找到,跳到第2步,否则继续执行其他处理。

2、从中央仓库查找构件,如果没有找到,并且已经设置其他远程仓库,然后移动到第4步;如果找到,那么将构件下载到本地仓库中使用。

3、如果没有设置其他远程仓库,Maven则会停止处理并抛出错误。

4、在远程仓库查找构件,如果找到,则会下载到本地仓库并使用,否则Maven停止处理并抛出错误。

(0)

相关推荐

  • Maven项目管理工具:Maven生命周期(clean+site+default)

    在Maven出现之前,项目构建的生命周期就已经存在,开发人员每天都在对项目进行清理,编译,测试及部署,但由于没有统一的规范,不同公司甚至不同项目之间的构建的方式都不尽相同. Maven从大量项目和构建 ...

  • Maven项目管理工具:Maven依赖

    Maven是一款优秀的依赖管理工具,那么什么是依赖呢? 通俗的说,如果一个Maven构建所产生的构件(例如Jar文件)被其他项目引用,那么该构件就是其他项目的依赖. 依赖声明 Maven坐标是依赖的前 ...

  • Maven项目管理工具:Maven自动化构建

    Maven自动化构建是一种方案,即当某个项目构建完成后(特别是有代码更新的情况下),所有依赖它的相关项目也应该开始构建过程,以确保这些项目的稳定运行. Maven的自动化构建主要通过如下两种方案实现: ...

  • Maven项目管理工具:MavenSNAPSHOT(快照)

    我们知道,Maven项目第一构建时,会自动从远程仓库搜索依赖项,并将其下载到本地仓库中.当项目再进行构建时,会直接从本地仓库搜索依赖项并引用,而不会再次向远程仓库获取.这样的设计能够避免项目每次构建时 ...

  • Maven项目管理工具:MavenArchetype(原型/模板)

    Archetype是Maven项目的模板工具包,它定义了Maven项目的基本架构.Archetype为开发人员提供了数千种创建Maven项目的模板,Maven通过这些模板可以帮助用户快速的生成项目的目 ...

  • Maven项目管理工具:Maven聚合

    在实际的开发过程中,我们所接触的项目一般都由多个模块组成.在构建项目时,如果每次都按模块一个一个地进行构建会十分得麻烦,Maven的聚合功能很好的解决了这个问题. 聚合 使用Maven聚合功能对项目进 ...

  • Maven项目管理工具:IDEA配置Maven环境

    IntelliJIDEA是当前最流行的JavaIDE(集成开发环境)之一,也是业界公认最好用的Java开发工具之一.IntelliJIDEA支持Maven的全部功能,通过它我们可以很轻松地实现创建Ma ...

  • Maven项目管理工具:Eclipse配置Maven

    前面所涉及的Maven项目结构和代码都十分的简单,即使是使用最简单的文本编辑器也能够很快就能完成.但在实际的开发过程中,我们所涉及的Maven项目往往要复杂得多,此时我们就需要借助IDE(集成开发环境 ...

  • Maven项目管理工具:Maven创建Web项目

    到目前为止,我们所接触的Maven项目的打包类型只有JAR和POM,但在现今的互联网时代,我们创建的大部分应用程序都是Web应用,在Java中Web应用的打包方式是WAR. 本节我们将介绍如何使用Ma ...