8

Maven、Gradle 配置国内镜像源

 3 years ago
source link: http://www.cnblogs.com/chansblogs/p/12943991.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Maven

全局配置

修改 Maven 默认的全局配置文件:

  • 类 Unix 系统: Mac OS / Linux 默认在 ~/.m2/settings.xml
  • Windows 系统:一般在 Maven 安装目录的 conf/settings.xml
<?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">

    <!-- 添加以下这段 Mirror 配置 -->
    <mirrors>
        <!-- Aliyun -->
        <mirror>
            <id>aliyunmaven</id>
            <name>aliyun maven</name>
            <mirrorOf>*</mirrorOf>      
            <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
    </mirrors>


</settings>

单项目配置

修改项目的 pom.xml,添加以下内容:

<repositories>
    <repository>
        <id>aliyunmaven</id>
        <url>https://maven.aliyun.com/repository/public</url>
    </repository>
</repositories>

Gradle

全局配置

${USER_HOME}/.gradle/ 目录下创建 init.gradle 文件,添加以下内容:

allprojects {
    repositories {
        def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
            }
        }
        maven { url ALIYUN_REPOSITORY_URL }
    }
}

单项目配置

修改项目的 build.gradle 文件,添加以下内容:

buildscript {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
    }
}

也可以直接添加在 repositories 内:

repositories {
    maven { url 'https://maven.aliyun.com/repository/public' }
    mavenCentral()
}

其他仓库

在上面的配置中,我们主要配置的是 public 仓库,而 阿里云: https://maven.aliyun.com 除此之外,还代理了许多其他的仓库,可作为下载源。如 google、spring 等(更多可点进链接查看详情)。

而我们常用的 public 仓库,其实是 central: https://repo1.maven.org/maven2/ 仓库和 jcenter: http://jcenter.bintray.com/ 仓库的聚合,所以配置了 public 仓库,就不需要再配置 jcenter 的仓库了。

若需要使用其他的代理仓库,如 google、spring,可参考以下配置:

Maven

全局配置

同上,修改 settings.xml 文件:

<?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">

    <mirrors>
        <!-- Aliyun -->
        <mirror>
            <id>alimaven-public</id>
            <name>aliyun public maven repo</name>
            <url>https://maven.aliyun.com/repository/public</url>
            <mirrorOf>*</mirrorOf>
        </mirror>

        <mirror>
            <id>alimaven-google</id>
            <name>aliyun google maven repo</name>
            <url>https://maven.aliyun.com/repository/google</url>
            <mirrorOf>*</mirrorOf>
        </mirror>

        <mirror>
            <id>alimaven-spring</id>
            <name>aliyun spring maven repo</name>
            <url>https://maven.aliyun.com/repository/spring</url>
            <mirrorOf>*</mirrorOf>
        </mirror>

        <!-- Tencent Cloud -->
        <!-- <mirror>
            <id>nexus-tencentyun</id>
            <mirrorOf>*</mirrorOf>
            <name>Nexus tencentyun</name>
            <url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
        </mirror> -->

        <!-- Netease 163 -->
        <!-- <mirror>
            <id>netease</id>
            <mirrorOf>*</mirrorOf>
            <name>Netease maven</name>
            <url>http://mirrors.163.com/maven/repository/maven-public/</url>
        </mirror> -->
    </mirrors>


</settings>

单项目配置

修改 pom.xml:

<repositories>
    <repository>
        <id>aliyunmaven-google</id>
        <name>aliyun google maven repo</name>
        <url>https://maven.aliyun.com/repository/google</url>
        <layout>default</layout>
        <!-- 是否开启 release 版构件下载 -->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!-- 是否开启 snapshot 版构件下载 -->
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>aliyunmaven-spring</id>
        <name>aliyun spring maven repo</name>
        <url>https://maven.aliyun.com/repository/spring</url>
    </repository>
</repositories>

是否开启 releases、snapshots 版下载可根据自身需求调整。

Gradle

全局配置

allprojects {
    repositories {
        def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
        def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://dl.google.com/dl/android/maven2')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
                    remove repo
                }
            }
        }
        maven { url ALIYUN_REPOSITORY_URL }
        maven { url ALIYUN_GOOGLE_URL }
    }
}

单项目配置

修改 `build.gradle`:

buildscript {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/spring' }
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/spring' }
    }
}

其他镜像源

腾讯云

https://mirrors.cloud.tencent.com

参考配置:

Maven

 <mirror>
     <id>nexus-tencentyun</id>
     <mirrorOf>*</mirrorOf>
     <name>Nexus tencentyun</name>
     <url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
 </mirror> 
<repositories>
    <repository>
        <id>nexus-tencentyun</id>
        <name>Nexus tencentyun</name>
        <url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
    </repository>
</repositories>

Gradle

buildscript {
    repositories {
        maven { url 'http://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
    }
}

allprojects {
    repositories {
        maven { url 'http://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
    }
}

FAQ

Q: 为什么你配置里用的 URL 都是 https://maven.aliyun.com/repository/public,而我看其他的人/文章,都用的是 http://maven.aliyun.com/nexus/content/groups/public 呢?

A: 阿里云在前几年对 https://maven.aliyun.com 进行了代码和架构上的改造,新版的 https://maven.aliyun.com 下载速度更快,支持高并发,而且全站进行了 HTTPS 加密,更安全。而新版的 Maven Mirror 地址,就是 https://maven.aliyun.com/repository/{reponame},然而阿里云为了保持旧地址的兼容,所以旧地址依然可以使用,但推荐使用新地址。

更多详情可参考: https://yq.aliyun.com/articles/621196?commentId=21341


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK