以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_repositories.html

什么是Maven仓库?

在Maven的术语中,仓库是一个地方或者说是目录,其中存储有项目jar包、库、插件或者任何其他项目指定的组件,并且易于被Maven使用。

Maven仓库有三种类型:

  • 本地仓库(local
  • 中央仓库(central
  • 远程仓库(remote

Maven依赖搜索顺序

当我们执行Maven构建命令时,Maven将开始按照下面的顺序搜索依赖库。

  • 第1步 - 搜索本地仓库中的依赖,如果没有找到,进入第2步,否则若找到则进行后续的处理。

  • 第2步 - 搜索中央仓库中的依赖,如果没有找到并且指定了远程仓库,则进入第4步,否则若找到,则下载依赖到本地仓库进行后续的查询。

  • 第3步 - 如果远程仓库没有指定,Maven将简单地停止构建并且抛出异常(找不到依赖)。

  • 第4步 - 搜素远程仓库中的依赖,如果找到则下载依赖到本地仓库进行后续的查询,否则Maven按预想地停止构建并且抛出异常(找不到依赖)。

Maven仓库依赖示意图

图片出自:http://maven.apache.org/repository/index.html

本地仓库(local)

Maven本地仓库是电脑上的某个目录地址。它会在你第一次运行maven任意命令时创建。

Maven本地仓库保存着你项目所有的依赖(库的、插件的jar包等等)。当你运行Maven构建时,Maven会自动下载所有依赖的jar包到本地仓库中。这会帮助避免每次项目构建时项目的依赖参考都存储在远程的主机上。

Maven默认在%USER_HOME%\.m2目录下创建Maven本地仓库。若要重写默认路径需要在Maven的setting.xml中指定另外一个路径。Maven的setting.xml文件可在%M2_HOME%\conf目录下获取。

提示:%USER_HOME%和表示Windows的环境变量,默认是在C:\Users\用户名下。%M2_HOME%为自定义的环境变量,表示Maven程序存放的目录。Linux下同理。

配置自定义本地仓库位置:

<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>

提示:为了避免处理异常,上面的路径采用Linux下的斜杠为写法,因为Windows两种斜杠都是支持的。

中央仓库(central)

Maven中央仓库是由Maven社区提供的仓库。它包含大量的常用库。Maven当未在本定仓库中找到任何的依赖时,Maven会使用下面的URL在中央仓库中搜索:http://repo1.maven.org/maven2/

中央仓库几个关键概念:

  • 中央仓库仓库是由Maven社区管理。 
  • 中央仓库不需要配置。
  • 搜索中央仓库需要接入互联网。

Maven社区提供了一个URLhttp://search.maven.org/供用户浏览Maven中央仓库的内容。用这种方法,开发者可以搜索中央仓库中所有可用的库。

提示:默认的中央仓库地址可以修改,并且默认中央仓库可以提交自己的包上去。

远程仓库(remote)

有时Maven在中央仓库中也找不到指定的依赖,这时Maven会停止构建进程并且输出错误信息到控制台。为了防止这样的情况,Maven提出了远程仓库的概念,即开发者自己定制的包含库或者其他项目jar包的仓库。

比如,使用下面提到的pom.xml文件,Maven将会从此pom.xml指定的远程仓库中下载依赖(依赖在中央仓库中找不到时)。

<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.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>com.companyname.common-lib</groupId>
<artifactId>common-lib</artifactId>
<version>1.0.0</version>
</dependency>
<dependencies>
<repositories>
<repository>
<id>companyname.lib1</id>
<url>http://download.companyname.org/maven2/lib1</url>
</repository>
<repository>
<id>companyname.lib2</id>
<url>http://download.companyname.org/maven2/lib2</url>
</repository>
</repositories>
</project>

提示:上述的地址不是真实地址。其中仓库的顺序也是查找的顺序,从上往下的进行搜索。

其它参考:

http://maven.apache.org/guides/introduction/introduction-to-repositories.html

Maven的仓库的更多相关文章

  1. Maven远程仓库的认证

    大部分远程仓库无须认证就可以访问,但有时处于安全方面的考虑,我们需要提供认证信息才能访问一些远程仓库.为了防止非法的仓库访问,管理员为每个仓库提供了一组用户名及密码. 这时,为了能让Maven访问仓库 ...

  2. (十一)Maven远程仓库的各种配置

    1.远程仓库的配置 在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他 ...

  3. 使用Nexus搭建Maven本地仓库

    阅读目录 序 Nexus 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 在工作中可能存在有 ...

  4. 向maven中央仓库提交jar

    从来都是从中央仓库下载jar,这次需要向中央仓库提交jar, 利用Sonatype OSSRH可以把jar等资源提交给Maven的中央仓库. Sonatype OSSRH介绍: Sonatype OS ...

  5. maven 本地仓库和远程仓库

    在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方) 任何的 ...

  6. 喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库

    相信通过java和SQLServer开发应用的同学们都经历过如下类似的问题. 微软提供的JDBC官方驱动没有放置在Maven仓库中,这样如果你的Java应用需要访问SQL Server,你不得不下载s ...

  7. Maven本地仓库及远程仓库

    转载自:http://blog.csdn.net/wanghantong/article/details/36427433 Maven 仓库的分类: maven的仓库只有两大类:1.本地仓库 2.远程 ...

  8. nexus 搭建maven本地仓库

    使用Nexus搭建Maven本地仓库   阅读目录 序 Nexus 序 在工作中可能存在有些开发机器不能上网,大量的机器获取jar包会导致公司网络很慢,还有时候公司会自己发布自己的项目版本,其他的项目 ...

  9. [maven] 使用Nexus创建maven私有仓库

    1.为什么需要maven私有仓库? 从Maven中央仓库下载所需的jar包,需要外网的支持.如果公司不能上外网的话则不能从中央仓库下载所需jar包,公司网速慢的时候也会影响项目构建的速度.用户可以用n ...

  10. [maven] 常用仓库地址

    共有的仓库 http://mvnrepository.com/ http://repo1.maven.org/maven2/ http://repository.jboss.com/maven2/ h ...

随机推荐

  1. 菜鸟学习Cocos2d-x 3.x——内存管理

    菜鸟学习Cocos2d-x 3.x——内存管理 2014-12-10 分类:Cocos2d-x / 游戏开发 阅读(394) 评论(6)    亘古不变的东西 到现在,内存已经非常便宜,但是也不是可以 ...

  2. Xcode中的约束用法

    这篇文章用几个简单的例子来介绍XCode6.1故事板中约束的使用方法.   现在iOS设备屏幕的尺寸也有很多种了,尤其是有了iPhone6 Plus以后,再不关注界面的尺寸适配就有点说不过去了.   ...

  3. shell基础笔记1

    ---恢复内容开始--- 1 test命令中不能使用浮点小数值,如:    A=1.444444:[    $A -gt 1  ] 2 test命令中的>或<必须转义,否则shell会把它 ...

  4. 总结:JavaScript异步、事件循环与消息队列、微任务与宏任务

    本人正在努力学习前端,内容仅供参考.由于各种原因(不喜欢博客园的UI),大家可以移步我的github阅读体验更佳:传送门,喜欢就点个star咯,或者我的博客:https://blog.tangzhen ...

  5. [CODEVS] 2189 数字三角形W

    数字三角形 要求走到最后mod 100最大 可达性DP(好像是这样叫) 用bool数组f[i][j][k]表示 位置(i,j)能否得到k(mod 100意义下) 转移条件 f[i][j][k]=f[i ...

  6. 2018-10-09中国裁判文书网爬虫vl5x和DocID分析

    本来是想要抓取食药监的药品数据,看到js加密很繁琐,调了一个星期没有结果,想看看其他类似网站的js加密情况,发现裁判文书网的加密好像不是太复杂,经过两天的分析和编写,基本把vl5x加密和DocID解密 ...

  7. cs229_part4

    又到了一节很重要的课,因为这个学习理论是从统计角度为机器学习算法提供了一个理论基础. 学习理论 问题背景 先回顾一下我们第一节课提到的机器学习的组成: 第一节课只是简单的提了一下,现在我们要真正来分析 ...

  8. tomcat 修改默认端口8080 为 80端口

    首先,找到你的安装目录,如图: 打开server.xml文件,找到8080,如图: 将 8080  改成你想要的端口,如 80 即可.改完后,记得要重启tomcat! 将端口改成 80 后,访问就不需 ...

  9. luogu1963 [NOI2009]变换序列

    #include <iostream> #include <cstring> #include <cstdio> using namespace std; int ...

  10. How To Configure VMware fencing using fence

    本文主要简单介绍一下如何在RHEL 7 Pacemaker中配置一个fence_vmware_soap类型的STONITH设备(仅供测试学习). STONITH是Shoot-The-Other-Nod ...