Maven(三):Maven仓库与配置

本文详细介绍了Maven的仓库概念,包括本地仓库、中央仓库和远程仓库的配置。本地仓库默认位于用户目录下,可自定义路径。中央仓库是Maven的默认远程仓库。在pom.xml和settings.xml中可以配置远程仓库,包括发布版和快照版的下载策略,以及更新检查频率。认证信息需在settings.xml中配置。此外,还讨论了镜像仓库的设置,以提高构件下载速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仓库

Maven 中, 任何一个依赖、插件或项目构建的输出, 都可称为构件, 而Maven仓库就是集中存储这些构件的地方。
Maven仓库可简单分成两类: 本地仓库与远程仓库. 当Maven根据坐标寻找构件时, 它会首先检索本地仓库, 如果本地存在则直接使用, 否则去远程仓库下载。如果本地仓库和远程仓库都没有需要的构建Maven就会报错。
在这里插入图片描述

本地仓库

默认地址为用户目录下/.m2/repository/的仓库路径,如果需要自定义仓库地址,则要修改/.m2/settings.xml设置localRepository元素值为仓库地址。settings.xml可以从maven的安装目录下conf文件拷贝。

<localRepository>E:\maven\repository</localRepository>

中央仓库

Maven默认的远程仓库,安装文件中自带了中央仓库的配置,Maven安装目录下lib/maven-model-builder-3.2.5.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> 

远程仓库配置

pom.xml中配置

在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求。这时,可以在pom.xml中配置该仓库,

<!-- 配置远程仓库 -->
    <repositories>
        <repository>
            <id>jboss</id>
            <name>JBoss Repository</name>
            <url>http://repository.jboss.com/maven2/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
                <checksumPolicy>warn</checksumPolicy>
            </snapshots>
            <layout>default</layout>
        </repository>
</repositories>
  • releases和snapshots:用来控制Maven对于发布版构件和快照版构件的下载权限。需要注意的是enabled子元素,该例中releases的enabled值为true,表示开启JBoss仓库的发布版本下载支持,而snapshots的enabled值为false,表示关闭JBoss仓库的快照版本的下载支持。updatePolicy用来配置Maven从远处仓库检查更新的频率,可用的值包括:daily(默认)-每天检查一次;never-从不检查更新;always-每次构建都检查更新;interval:X-每隔X分钟检查一次更新(X为任意整数)。checksumPolicy用来配置Maven检查校验和文件的策略。在下载构件的时候,Maven会验证校验和文件,如果校验和验证失败,配置checksumPolicy为warn(默认)-Maven会在执行构建时输出警告信息;fail-Maven遇到校验和错误就让构建失败;ignore-使Maven完全忽略校验和错误。
  • layout:元素值default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局。基本不会用到Maven1的布局。
Settings.xml中配置

如果很多项目都需要配置相同的远程从仓库,那么再每个项目的pom.xml中配置会带来很多重复操作,可以在settings.xml中统一配置该远程仓库。可以在profile中通过repositories配置多个repository,并在activeProfiles中将该profile激活。

<profiles>
 <profile>
            <repositories>
                <repository>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                    <id>central</id>
                    <name>repo</name>
                    <url>...</url>
                </repository>
 			</repositories>
            <id>artifactory</id>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>artifactory</activeProfile>
    </activeProfiles>

maven自动下载依赖时,会涉级读取三个配置文件,分别是项目下的pom.xml 文件 、home目录下的.m2/settings.xml 与 maven 全局配置settings.xml,三者的级先是 pom.xml > /home_dir/.m2/settings.xml > /maven_dir/conf/settings.xml ,也就是说maven会先去项目pom.xml中配置的仓库中下载构建,下载不到再去home目录下的.m2/settings.xml下配置的仓库载构建,还是找不到最后去全局配置settings.xml下配置的仓库下载。

远程仓库认证

Settings.xml配置

大部分公共的远程仓库无须认证就可以直接访问,但我们在平时的开发中往往会架设自己的Maven远程仓库,出于安全方面的考虑,我们需要提供认证信息才能访问这样的远程仓库。配置认证信息和配置远程仓库不同,远程仓库可以直接在pom.xml中配置,但是认证信息必须配置在settings.xml文件中。Settings.xml中配置如下信息:

<settings>
      ...
      <!--配置远程仓库认证信息-->
      <servers>
          <server>
              <id>releases</id>
              <username>admin</username>
              <password>admin123</password>
          </server>
     </servers>
     ...
 </settings>

上面代码我们配置了一个id为releases的远程仓库认证信息。Maven使用settings.xml文件中的servers元素及其子元素server配置仓库认证信息。settings.xml中server元素的id必须与pom.xml中需要认证的repository元素的id完全一致。

pom.xml中配置

Maven除了能对项目进行编译、测试、打包之外,还能将项目生成的构件部署到远程仓库中。需要在项目pom.xml中配置distributionManagement元素:

<distributionManagement>
        <repository>
            <id>releases</id>
            <name>public</name>
            <url>...</url>
        </repository>
		<snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url>...</url>
       	</snapshotRepository>
</distributionManagement>

镜像

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

<mirrors>
     <mirror>
      <id>maven.oschina.net</id>
      <name>maven mirror in China</name>
      <url>http://maven.oschina.net/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

其中mirrorOf表示该镜像代替的仓库范围:

  • <mirrorOf>central</mirrorOf>中央仓库的镜像,所有对中央仓库的请求都会转至该镜像。
  • <mirrorOf>*</mirrorOf>匹配所有远程仓库
  • <mirrorOf>extenal:*</mirrorOf>匹配所有不在本机上的远程仓库(匹配所有远程仓库,localhost、file://协议除外)
  • <mirrorOf>repo1,repo2</mirrorOf>匹配仓库repo1和repo2
  • <mirrorOf>*,!repo1</mirrorOf>匹配所有非repo1的远程仓库

参考:《Maven实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值