【Maven】仓库 ——repository

仓库

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

得益于坐标机制,任何Maven项目使用任何一个构件的方式都是完全相同的。在此基础上,Maven可以在某一个位置统一存放所有Maven项目共享的构件,这个统一的位置就是仓库。实际的Maven项目将不在各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候,Maven会自动根据坐标找到仓库中的构件,并使用它们。

仓库的布局

任何一个构件都有其唯一的坐标,可以根据这个坐标定义其在仓库中的唯一存储路径,这便是Maven的仓库布局方式。

例如:log4j:log4j:1.2.15这一依赖,其对应的仓库路径为log4j/log4j/1.2.15/log4j-1.2.15.jar。该路径与坐标的大致对应关系为groupId / artifactId / version / artifactId-version.packaging

Maven仓库是基于简单文件系统存储的。

仓库的分类

对于Maven来说,仓库只分为两类:本地仓库和远程仓库。

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

远程仓库的分类:

  • 中央仓库——是Maven核心自带的远程仓库,它包含了绝大部分开源的构件。在默认配置下,当本地仓库没有Maven需要的构件的时候,它就会尝试从中央仓库下载。
  • 私服——在局域网内假设一个私有的仓库服务器。
  • 其他公开的远程仓库——

本地仓库

一般来说,在Maven项目目录下,没有哲如lib/这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。

默认情况下,不管是在Windows还是Linux下,每个用户在自己的用户目录下都有一个路径名为.m2 / repository的仓库目录。

如果用户想要自定义本地仓库的目录地址,这时,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址,例如:

<settings>
    <localRepository>D:\java\repository\<localRepository>
<settings>

远程仓库

当用户输入第一条Maven命令之后,Maven才会创建本地仓库,然后根据配置和需要,从远程仓库下载构件至本地仓库。

对于Maven来说,每一个用户只有一个本地仓库,但可以配置访问很多远程仓库。

  • 中央仓库

中央仓库是一个默认的远程仓库,Maven的安装文件自带了中央仓库的配置。打开文件¥M2_HOME/lib/maven-model-builder-3.0.jar,访问路径org/apache/maven/model/pom-4.0.0.xml,看到如下配置:

<repositories>
    <repository>
        <id>central</id>
        <name>Maven Repository Switchboard</name>
        <url>http://repol.maven.org/maven2</url>
        <layout>default</alyout>
        <snapshot>
            <enabled>false</enabled>
        </snapshot>
    </repository>
</repositories>

包含这段配置的文件是所有Maven项目都会继承的超级POM

  • 私服

私服是一种特殊的远程仓库,它是假设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载提供请求服务。


远程仓库的配置

如果项目需要的构件存在于另外一个远程仓库中,如JBoss Maven仓库,这时,可以在POM中配置该仓库,例如:

<project>
... ...
    <repositories>
        <repository>
            <id>jboss</id>
            <name>JBoss Repository/name>
            <url>http://repository.jboss.com.maven2/</url>
            <release>
                <enabled>true</enabled>
            </release>
            <snapshot>
                <enabled>false</enabled>
            </snapshot>
            <layout>default</alyout>
    </repository>
</repositories>
...
</project>

在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。任何一个仓库声明的id必须是唯一的。如果其他仓库声明使用中央残酷的id——central,就会覆盖中央仓库的配置。

release子元素enabled的为true,表示开启JBoss仓库的发布版本下载支持。

snapshot的enabled的值为flase,表示关闭JBoss仓库的快照版本的支持,Maven只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件。

对于release和snapshot来说,除了enabled,它们还包含另外两个子元素updatePolicy和checksumPolicy:

远程仓库的认证

大部分远程仓库无须认证就可以访问,但有时候出于安全方面的考虑,需要提供认证信息才能访问一些远程仓库。

配置认证信息和配置仓库信息不同,仓库信息可以直接配置在POM文件中,但是认证信息必须配置在settings.xml文件中

假设需要一个id为my-proj的仓库配置认证信息,编辑settings.xml文件如下:

<settings>
    ... ...
    <servers>
        <server>
            <id>my-proj</id>
            <username>repo-user</username>
            <password>repo-pwd</passoword>
        </server>
    </servers>
    ... ...
</settings>
settings.xml中server元素的id必须与POM中需要认证的repository元素的id完全一致, 这个id将认证信息与仓库配置联系在了一起


仓库搜索服务

使用Maven进行日常开发的时候,一个常见的问题就是如何寻找需要的依赖,我们可能只知道需要使用类库的项目名称,但添加Maven依赖要求提供确切的Maven坐标。这时,就可以使用仓库所有服务来根据关键字得到Maven坐标。

https://repository.sonatype.org/

http://www.mvnrepository.com/





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值