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

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:\IT\maven\repo</localRepository>

<settings>

这样,该用户的本地仓库地址就被设置成了 D:\IT\maven\repo。需要注意的是,默认情况下,~/.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.9\conf\settings.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实战》

时间: 2024-08-05 22:33:19

[Maven实战](6)仓库(本地仓库,远程仓库,镜像)的相关文章

如何创建/修改远程仓库 + 如何删除远程仓库 + 如何删除远程仓库中的某个文件或文件夹 + 如何使用git将本地仓库连接到多个远程仓库

首先我们来区分一些概念.术语.名词.不然脑子一锅粥,总是晕!!!博主对此深有体会!从中学到了没事要多总结.多归类! 仓库有本地仓库和远程仓库之分.仓库都可以叫做服务端(器).本地仓库有:Windows.Linux.MacOS.(指的是运行在不同系统下的本地仓库)远程仓库有:GiuHub(国外).Gitee码云(国内).Coding(国内)等等.(说白了就是服务器)那么服务端可以分为:本地服务端(器).远程服务端(器).连接仓库的方式有:https.SSH等等.连接仓库的客户端软件(工具)有:Gi

git 入门教程之本地和远程仓库的本质

本地仓库和远程仓库在本质上没有太大区别,只不过一个是本地电脑,一个是远程电脑. 远程仓库不一定非得是 github 那种专门的"中央服务器",甚至局域网的另外一台电脑也可以充当"中央服务器"的角色,因为它存在的最初目的只是方便大家交换彼此的提交记录而已! 所以本地仓库和远程仓库的基本行为应该是一致的,约定俗成的规定是远程仓库一般不直接参与日常开发工作,主要作为项目托管中心. 某些自动化持续集成环境中也可能会直接操作远程仓库,这时远程仓库就真的和本地仓库没什么区别了!

maven 安装alipay-sdk包到本地及远程仓库

安装到本地:mvn install:install-file -DgroupId=com.alipay -DartifactId=sdk-Java -Dversion=*** -Dpackaging=jar -Dfile=alipay-sdk-java*.jar 安装到远程仓库:配置maven: <!-- Another sample, using keys to authenticate. <server> <id>siteServer</id> <pri

Maven依赖的是本地工程还是仓库jar包?

相信大家都碰见过maven配置的依赖或者是jar包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看maven依赖的文件的时候,就能直接查看到源码. 一.本地工程依赖 举个例子,其架构如下所示(以下均使用eclipse中m2eclipse插件进行演示)-- 此时,这里依赖的"dependency-to-hello"指代的是eclipse工作空间中的工程,这样,我们直接源码依赖的便是工作空间里的源码,这样很方便,也是我们需要的.会注意到,所依赖的"dependen

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

https://blog.csdn.net/x_iya/article/details/75040806 本地仓库配置配置环境变量GRADLE_USER_HOME,并指向你的一个本地目录,用来保存Gradle下载的依赖包. 远程仓库配置一般Gradle.maven从中央仓库mavenCentral() http://repo1.maven.org/maven2/下载依赖包,但是在国内下载速度巨慢,我们只能使用国内的镜像. 所以每个Gradle构建的项目中,我们可以在build.gradle做如下

本地仓库关联远程仓库,从远程仓库克隆代码

1.查看仓库的所有配置信息 git config -l  或者 git config --lis  如果没有则配置添加git的用户名 email信息 git config –global user.name “tylerdeng”git config –global user.email “[email protected]” 2.生成秘钥 需要你配置的邮箱信息 $ ssh-keygen -t rsa -C “[email protected]”  关联?仓库配置的邮箱号 $ cat ~/.ss

使用Git将本地仓库与GitHub远程仓库相关联

这篇文章详细讲解了如何生成SSH,并链接到GitHub,123..... 1.如果你的GitHub里面没有仓库,就自己生成一个,如图所示 2.如果你有自己仓库,想在电脑本地新建一个,你需要将GitHub的仓库地址复制下来,注意使用的是ssh,如图所示, 3.在电脑本地新建一个文件夹,将我们的远程仓库clone下来, 我是在d盘,test文件夹下面,直接右击选择git bash here [email protected] MINGW32 /d/test 输入下面的命令 $ git clone [

git 入门第二节 本地和远程仓库链接

第一步 去远程git仓库上找到仓库路径复制下来 第二步 在git里输入命令符 git clone 路径 这样 远程文件就添加到了你git找到的目录里  从远端-本地 第三步cd 回到你要上传的目录 把你想要上传到远程仓库的文件直接从本地复制进去 ls查看 文件名字为红色 说明这些没有同步到远程g仓库. 第四步 git add *  ls查看 文件名为绿色 说明已经添加 但只是缓存 没有提交到仓库 可以写注释表明修改具体信息 git commit -m "xxx" 第五步git push

git 本地给远程仓库创建分支 三步法

命令如下: 1:本地创建分支dev [email protected] /D/home/myself/Symfony (master) $ git branch dev 2:下面是把本地分支提交到远程仓库 [email protected] /D/home/myself/Symfony (master) $ git push origin dev Total 0 (delta 0), reused 0 (delta 0) To [email protected]:TuringTD/Symfony

1. git 本地给远程仓库创建分支 三步法

命令如下: 1:本地创建分支dev 1 2 [email protected] /D/home/myself/Symfony (master) $ git branch dev 2:下面是把本地分支提交到远程仓库 1 2 3 4 5 [email protected] /D/home/myself/Symfony (master) $ git push origin dev Total 0 (delta 0), reused 0 (delta 0) To [email protected]:Tu