Maven —— Repository

 

settings.xml文件仓库配置

settings.xml默认位置:${user.home}/.m2/settings.xml

本地仓库默认位置:${user.home}/.m2/repository

如下配置一个镜像一般就可以满足个人开发了。

<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>
    /Users/username/Projects/myrepository
  </localRepository>
  <!-- 配置一个镜像 -->
  <mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>
</settings>

或者配置一个远程仓库

<?xml version="1.0" encoding="UTF-8"?>


<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>
    /Users/username/Projects/myrepository
  </localRepository>
  <profile>
    <id>central</id>
     <repositories>
        <repository>  
            <id>central</id>
            <name>central</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
            <layout>default</layout>
            <releases>
             <enabled>true</enabled>
             <updatePolicy>always</updatePolicy>
            </releases> 
            <snapshots>
             <enabled>true</enabled>
             <updatePolicy>always</updatePolicy>
            </snapshots> 
        </repository>  
     </repositories>
  </profile>
  <!-- 
  <mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors> -->

</settings>

 

镜像

正如其名,就是一个副本。

定义:X仓库可以提供Y仓库的所有构件,那么可以认为X是Y的一个镜像。

也就是说,任何可以从Y仓库获取的构件都可以从镜像中获取。

那都有远程仓库了,为什么还要一个镜像呢?直接配置远程仓库不更直观吗?

镜像仓库与被镜像仓库不在一个服务器上,那就可以像CDN一样,就近获取资源。比如:http://maven.net.cn/content/groups/public/ 是中央仓库http://repo1.maven.org/maven2/ 在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。

配置一个镜像:

  <mirrors>
    <!-- 配置一个镜像 -->
    <mirror>
      <!-- 镜像唯一标识 -->
      <id>alimaven</id>
      <!-- 景象名称 -->
      <name>aliyun maven</name>
      <!-- 镜像服务器地址 -->
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <!-- 被镜像的仓库 -->
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>

<mirrorOf>central</mirrorOf>  

即请求该标签下的仓库时,会被拦截并去上面配置的镜像服务器地址下载相应的构件。如本例,在去中央仓库(central)下载构件时,会被拦截并去aliyun下载构件。

<mirrorOf>*</mirrorOf>  :匹配所有远程仓库。

<mirrorOf>external:*</mirrorOf>  :匹配所有远程仓库,使用localhost与file://协议的除外,即匹配所有不在本机上的远程仓库。

<mirrorOf>repository1,repository2</mirrorOf>  :匹配仓库repository1,repository2,使用逗号分隔多个远程仓库。

<mirrorOf>*,!repository1</mirrorOf>  :匹配所有远程仓库,repository1除外,使用感叹号将仓库匹配中排除。

 

仓库分类

 

本地仓库:

Maven在执行编译或者测试时,如果使用依赖文件,会基于坐标使用本地仓库的依赖文件。

远程仓库:

如果本地仓库不存在此构件,或者需要查看是否有更新的构建版本,Maven就回去远程仓库查找,找到需要的构件,然后下载到本地仓库使用。如果本地仓库和远程仓库都没有找到需要的构件,Maven就会报错。

中央仓库:

最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令时下载到需要的构件。中央仓库就是这样一个默认的远程仓库。

私服:

私服是一种特殊的远程仓库,架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用。比较重要的作用是部署第三方构件(比如公司内部的构件、无法从外部仓库直接获取的构件),部署到私服仓库具体见下文。

其他公共仓库:

如:阿里云  http://maven.aliyun.com/nexus/content/groups/public

配置一个远程仓库:

<profile>
     <repositories>
        <!-- 配置一个远程仓库 -->
        <repository>
            <!-- 该仓库的唯一标志(Maven自带中央仓库名为central,如果使用该标志就会覆盖中央仓库的配置) -->
            <id></id>
            <!-- 仓库名 -->
            <name></name>
            <!-- 仓库地址(一般是http协议,可在浏览器中打开该地址浏览构件) -->
            <url></url>
            <!-- default表示仓库布局是Maven2及Maven3的默认布局,而非Maven1布局 -->
            <layout></layout>
            <!-- 发布版构件配置 -->
            <releases>
                 <!-- true:可从该仓库下载发布版构件,false:不可从该仓库下载发布版 -->
                 <enabled></enabled>
                 <!-- 配置Maven从远程仓库检查更新的频率,默认值daily
                    daily:每天检查一次
                    never:从不检查更新
                    always:每次构建检查更新
                    interval:X   每隔X分钟检查一次更新,X为任意整数 
                -->
                 <updatePolicy></updatePolicy>
                 <!-- 配置Maven检查校验和文件的策略,默认值warn。(当构件被部署到Maven仓库时,会同时部署对应的校验和文件。)
                    warn:执行构建时输出警告信息
                    fail:遇到校验和错误就让构建失败
                    ignore:完全忽略校验和错误
                    -->
                 <checksumPolicy></checksumPolicy>
            </releases>
            <!-- 快照版构件配置 -->
            <snapshots>
                 <!-- true:可从该仓库下载快照版构件,false:不可从该仓库下载快照版 -->
                 <enabled></enabled>
                 <updatePolicy></updatePolicy>
                 <checksumPolicy></checksumPolicy>
            </snapshots>
        </repository>
     </repositories>
  </profile>

 

GAV定位构件在仓库中的位置

            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>

pathOf()方法 根据构件信息生成其在仓库中的路径

    private static final char PATH_SEPARATOR = '/';
    private static final char GROUP_SEPARATOR = '.';
    private static final char ARTIFACT_SEPARATOR = '-';

    public String pathOf(Artifact artifact) {
        ArtifactHandler artifactHandler = artifact.getArtifactHandler();
        StringBuilder path = new StringBuilder(128);
        path.append(formatAsDirectory(artifact.getGroupId())).append(PATH_SEPARATOR);
        path.append(artifact.getArtifactId()).append(PATH_SEPARATOR);
        path.append(artifact.getBaseVersion()).append(PATH_SEPARATOR);
        path.append(artifact.ArtifactId()).append(ARTIFACT_SEPARATOR).append(artifact.getVersion());

        if (artifact.hasClassifier()) {
            path.append(ARTIFACT_SEPARATOR).append(artifact.getClassifier());
        }

        if (artifactHandler.getExtension() != null && artifactHandler.getExtension().length() > 0) {
            path.append(GROUP_SEPARATOR).append(artifactHandler.getExtension());
        }
        return "";
    }

    private String formatAsDirectory(String directory) {
        return directory.replace(GROUP_SEPARATOR, PATH_SEPARATOR);
    }

仔细读一下还是挺好理解的。

G

org.mybatis.spring.boot   -> org/mybatis/spring/boot

A

org/mybatis/spring/boot/mybatis-spring-boot-starter

V

org/mybatis/spring/boot/mybatis-spring-boot-starter/1.3.2

 

远程仓库(镜像)认证配置

<!-- 远程仓库(镜像)认证配置 -->
  <servers>
    <server>
        <!-- 远程仓库(镜像)的id -->
        <id></id>
        <!-- 用户名 -->
        <username></username>
        <!-- 密码 -->
        <password></password>
    </server>
  </servers>

部署至远程仓库

在pom文件中配置部署地址

    <distributionManagement>
        <!-- 配置一个发布版本构件的仓库 -->
        <repository>
            <!-- 该远程仓库的唯一标识id -->
            <id>nexus-releases</id>
            <!-- 名字,方便阅读 -->
            <name>diy Nexus Releases</name>
            <!-- 该仓库的地址 -->
            <url>http://XXXX/nexus/content/repositories/releases</url>
        </repository>
        <!-- 配置一个快照版本构件的仓库 -->
        <snapshotRepository>
            <!-- 该远程仓库的唯一标识id -->
            <id>nexus-snapshots</id>
            <!-- 名字,方便阅读 -->
            <name>diy Nexus Snapshots</name>
            <!-- 该仓库的地址 -->
            <url>http://XXXX/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>

部署至远程仓库一般需要认证,认证同上的认证配置。

<repository></repository>发布版本仓库

<snapshotRepository></snapshotRepository>快照版本仓库

根据当前项目版本的部署到不同的仓库。如果是项目当前是快照版本就部署到快照版仓库地址,发布版本就部署到发布版本仓库地址。

快照版本

A开发X构件,同时B开发Y构件,X构件依赖于Y构件,所以X构件需要时刻获得最新的Y构件,此时就需要快照版本了。

快照版本就是为了保证获得到的快照构件是最新可用的。

版本号2.1-SNAPSHOT

发布时会自动为构件打上时间戳,如:2.1-20091214.221414-13就表示2009年12月14日22点14分14秒的第13次快照。

快照版本只应该在组织内部的项目或模块间依赖使用,因为此时,组织对于这些快照版本的依赖具有完全的理解和控制权。快照版本依赖实际对应的构件随时可能变化,项目的构建就可能由于这些外部的不受控制的因素而失败。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 如果你在使用Intellij IDEA时遇到了Maven下载缓慢的问题,可以尝试以下步骤来解决。首先,Intellij IDEA自带了Maven支持,无需单独安装Apache Maven就可以创建Maven项目。默认情况下,IDEA会从国外的仓库下载依赖文件,这可能导致下载速度较慢甚至超时。为了加快下载速度,你可以使用阿里云提供的镜像地址。具体操作步骤如下:\[1\] 1. 下载并配置Apache Maven。你可以从Apache官网下载Maven,并按照官方文档进行安装和配置。注意,如果你使用的是IDEA自带的Maven版本,只需修改IDEA生成的setting.xml文件即可(打开方法:右键项目——Maven——Open ‘settings.xml’)\[2\]。 2. 打开Intellij IDEA的设置选项卡,依次进入Build -> Build Tools -> Maven。在这里,你需要修改三个选项:Maven home directory(Maven的根目录)、User settings file(setting.xml文件目录)、Local repository(本地仓库目录)\[3\]。 通过以上步骤,你可以配置Intellij IDEA使用阿里云提供的镜像地址来加快Maven的下载速度。这样,在IDEA中创建的Maven项目将会从阿里云服务器下载镜像,并存放在指定的本地仓库路径中。希望这些步骤能够帮助你解决Maven下载缓慢的问题。 #### 引用[.reference_title] - *1* *2* *3* [解决Intellij IDEA配置Maven速度缓慢的问题](https://blog.csdn.net/Knightletter/article/details/101112401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值