[maven实战]仓库(本地仓库,远程仓库,镜像)

SunnyYoona      2022-02-06     25

关键词:

1. 简介

maven可以在某个位置统一存储所有maven项目共享的构件,这个统一的位置就是仓库。实际的Maven项目将不会各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候(例如,编译项目的时候需要将依赖加入到classpath中),maven会自动根据坐标找到仓库中的构件,并使用它们。为了实现重用,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其他项目使用。

2. 仓库分类

对于maven来说,仓库只分为两类:本地仓库和远程仓库。当maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有需要的构件,maven就会报错

在这个最基本分类的基础上,还有必要介绍一些特殊的远程仓库。中央仓库是maven核心自带的远程仓库,它包含了绝大部分开源的构件。在默认配置下,当本地仓库没有maven需要的构件的时候,它就会尝试从中央仓库下载。私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。除了中央仓库和私服,还有很多其他公开的远程仓库,常见的有java.net Maven库(http://download.java.net/maven/2/)和jboss Maven库(http://repository.jboss.com/maven2/)等。
技术分享
技术分享
3. 本地仓库

默认情况下,不管是在windows还是linux上,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。有时候,因为某些原因(例如C盘空间不够,或者要重装系统等等),用户会想要自定义本地仓库目录地址。这时,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址。例如:
<settings>
<localRepository>D:ITmaven epo</localRepository>
<settings>
这样,该用户的本地仓库地址就被设置成了 D:ITmaven epo。需要注意的是,默认情况下,~/.m2/settings.xml文件是不存在的,用户需要从Maven安装目录复制$M2_HOME/conf/settings.xml文件再进行编辑。

一个构件只有在本地仓库中之后,才能由其他Maven项目使用,那么构件如何进入到本地仓库中呢?
(1)最常见的是Maven从远程仓库下载到本地仓库中。当我们第一次运行某个命令时,例如mvn compile时,会下载大量文件当本地仓库中。
(2)还有一种常见的情况是,将本地项目的构件安装到Maven仓库中。使用命令:mvn clean install即可完成安装。install目标就是将项目的构建输出文件安装到本地仓库。

4. 远程仓库

安装好Maven后,如果不执行任何Maven命令,本地仓库目录是不存在的。当用户输入第一条Maven命令之后,Maven才会创建本地仓库,然后根据配置和需要,从远程仓库下载构件至本地仓库。
技术分享
技术分享

本地仓库好比书房,我需要读书的时候先从书房找,相应的,Maven需要构件的时候先从本地仓库找。远程仓库就好比书店,当我无法从自己的书房找到需要的书的时候,就会从书店购买后放到书房。相应的,当Maven无法从本地仓库找到需要的书的时候,就会从远程仓库下载构件到本地仓库。一般的,对于每个人来说,书房只有一个,但外面的书店却有很多,类似的,对于Maven来说,每个用户只有一个本地仓库,但可以配置很多远程仓库。

5. 中央仓库

由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库,Maven的安装文件自带了中央仓库的配置。读者可以使用解压工具打开jar文件$M2_HOME/lib/maven-model-builder-3.3.9.jar,然后访问路径:org/apache/maven/model/pom-4.0.0.xml,可以看到如下的配置:
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

包含这段配置的文件是所有Maven项目都会继承的超级POM。这段配置使用central对中央仓库进行唯一标识,其名称为Central Repository,它使用default进行仓库布局。最后需要注意的是snapshots元素,其子元素enabled的值为false,表示不从该中央仓库下载快照版本的构件。

6. 镜像仓库

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。举个例子,http://maven.oschina.net/content/groups/public/ 是中央仓库http://repo1.maven.org/maven2/ 在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。因此,可以配置Maven使用该镜像来替代中央仓库。编辑settings.xml(apache-maven-3.3.9confsettings.xml),代码如下:
<mirrors>
<mirror>
<id>maven.oschina.net</id>
<mirrorOf>central</mirrorOf>
<name>maven mirror in China</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
</mirrors>

该例中,mirrorOf的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,用户也可以使用同样的方法配置其他仓库的镜像。id表示镜像的唯一标识符,name表示镜像的名称,url表示镜像的地址。

关于镜像的一个更为常见的用法是结合私服。由于私服可以代理任何外部的公共仓库(包括中央仓库),因此,对于组织内部的Maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这可以将配置集中到私服,从而简化Maven本身的配置。在这种情况下,任何需要的构件都可以从私服获得,私服就是所有仓库的镜像。以后再慢慢介绍私服的使用。 


下面提供一些别的镜像仓库:
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
 
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
 
<mirror>
<id>net-cn</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://maven.net.cn/content/groups/public/</url>
</mirror>
 
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
 
<mirror>
<id>JBossJBPM</id>
<mirrorOf>central</mirrorOf>
<name>JBossJBPM Repository</name>
<url>https://repository.jboss.org/nexus/content/repositories/releases/</url>
</mirror>



来源于:《Maven实战》


maven详解之仓库------本地仓库远程仓库(代码片段)

Maven详解之仓库------本地仓库、远程仓库(转)在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依... 查看详情

maven的本地仓库的jar包是怎么来的

maven的conf下面有个settings.xml配置文件,里面配置了你本地仓库和镜像地址,maven根据artifactId和groupId来定位jar。首先会在本地仓库中搜索jar,找不到之后,会从maven的远程仓库下载,下载到本地。之后调用就是用的本地jar(maven镜像... 查看详情

maven--基本概念(仓库,坐标,仓库配置(本地仓库&镜像))(代码片段)

1.Maven仓库2.坐标什么是坐标?:Maven中的坐标用于描述仓库中资源的位置Maven坐标主要组成:groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)artifactld:定义当前Maven项目名称(通常是模块名称,例... 查看详情

maven是怎么判断包在本地仓库和远程仓库哪个是新的

运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。比如说,你的项目配置了junit-3.8的依赖,在你运行mvntest的时... 查看详情

kubernetes本地私有仓库实战

在讲解搭建私有仓库之前,先来了解下为什么要用私有仓库??本文基于registry搭建本地私有仓库,使用私有仓库的优点如下:节省网络带宽,针对于每个镜像不用去Docker官网仓库下载;下载Docker镜像从本地私有仓库中下载;组... 查看详情

本地仓库镜像是如何从maven拉取依赖并下载到本地的

参考技术A本地仓库镜像从maven拉取依赖的过程是:首先,在本地仓库镜像中搜索maven仓库中的依赖;其次,如果本地仓库镜像中没有找到依赖,则从maven仓库中拉取依赖;最后,将依赖下载到本地仓库镜像中。 查看详情

搭建本地maven仓库实战(代码片段)

搭建本地maven仓库实战1搭建本地maven1.1下载nexus(http://www.sonatype.org/nexus/archived/)1.2解压放到之后放到/Library/nexus-2.14.2-011.3配置修改在Nexus的安装目录找到/bin/nexus,修改NEXUS_HOME和RUN_AS_USER两个参数如下。NEXUS_HOME="/L 查看详情

搭建本地maven仓库实战(代码片段)

搭建本地maven仓库实战1搭建本地maven1.1下载nexus(http://www.sonatype.org/nexus/archived/)1.2解压放到之后放到/Library/nexus-2.14.2-011.3配置修改在Nexus的安装目录找到/bin/nexus,修改NEXUS_HOME和RUN_AS_USER两个参数如下。NEXUS_HOME="/L 查看详情

maven将远程仓库jar包安装至本地仓库(代码片段)

在maven仓库网站查询jar包https://mvnrepository.com/以【SpringBootGradlePlugin»2.1.3.RELEASE】为例获取jar包坐标及仓库地址使用如下命令安装:mvnorg.apache.maven.plugins:maven-dependency-plugin:2.1:get-Dartifact=org.springfram 查看详情

maven将远程仓库jar包安装至本地仓库(代码片段)

在maven仓库网站查询jar包https://mvnrepository.com/以【SpringBootGradlePlugin»2.1.3.RELEASE】为例获取jar包坐标及仓库地址使用如下命令安装:mvnorg.apache.maven.plugins:maven-dependency-plugin:2.1:get-Dartifact=org.springfram 查看详情

maven将远程仓库jar包安装至本地仓库(代码片段)

在maven仓库网站查询jar包https://mvnrepository.com/以【SpringBootGradlePlugin»2.1.3.RELEASE】为例获取jar包坐标及仓库地址使用如下命令安装:mvnorg.apache.maven.plugins:maven-dependency-plugin:2.1:get-Dartifact=org.springfram 查看详情

maven实战与原理分析:手把手带你搭建maven私有仓库(代码片段)

Maven的原理就是将jar从远程中央仓库下载到PC磁盘的本地仓库,当本地仓库没有发现需要的jar就会去Maven默认的远程中央仓库MavenCentral(由Apache维护)中寻找,每次需要新的jar后都要从远程中央仓库上下载。那么问题来了࿱... 查看详情

maven将远程仓库jar包安装至本地仓库(代码片段)

在maven仓库网站查询jar包https://mvnrepository.com/以【SpringBootGradlePlugin»2.1.3.RELEASE】为例获取jar包坐标及仓库地址使用如下命令安装:mvnorg.apache.maven.plugins:maven-dependency-plugin:2.1:get-Dartifact=org.springframework.boot:spring-boot-gradle-plugin:... 查看详情

maven本地仓库的依赖怎么在生产环境下运行

...术A在Maven中,依赖的管理和使用主要分为两种方式:本地仓库和远程仓库。本地仓库是指存储在本地计算机上的Maven仓库,而远程仓库则是指存储在网络上的Maven仓库。在开发环境中,我们通常会将依赖存储在本地仓库中,以提... 查看详情

gradle本地远程仓库配置--转

https://blog.csdn.net/x_iya/article/details/75040806本地仓库配置配置环境变量GRADLE_USER_HOME,并指向你的一个本地目录,用来保存Gradle下载的依赖包。远程仓库配置一般Gradle、maven从中央仓库mavenCentral()http://repo1.maven.org/maven2/下载依赖包... 查看详情

怎么自定义maven的中央仓库位置?

运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。比如说,你的项目配置了junit-3.8的依赖,在你运行mvntest的时... 查看详情

怎么自定义maven的中央仓库位置

运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。比如说,你的项目配置了junit-3.8的依赖,在你运行mvntest的时... 查看详情

linux之shell脚本实战批量上传docker镜像到华为云容器镜像仓库

【Linux之shell脚本实战】批量上传docker镜像到华为云容器镜像仓库一、脚本要求二、检查本地环境1.检查系统版本2.检查系统内核三、检查本地容器镜像四、shell注释模板配置1.配置~/.vimrc2.查看注释模板效果五、编辑images.sh脚本六... 查看详情