Maven、Gradle 配置中國鏡像源
Maven
全局配置
修改 Maven 默認的全局配置文件:
- 類 Unix 系統: Mac OS / Linux 默認在 ~/.m2/settings.xml
- Windows 系統:一般在 Maven 安裝目錄的 conf/settings.xml
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="//maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="//maven.apache.org/SETTINGS/1.0.0 //maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- 添加以下這段 Mirror 配置 --> <mirrors> <!-- Aliyun --> <mirror> <id>aliyunmaven</id> <name>aliyun maven</name> <mirrorOf>*</mirrorOf> <url>//maven.aliyun.com/repository/public</url> </mirror> </mirrors> </settings>
單項目配置
修改項目的 pom.xml,添加以下內容:
<repositories> <repository> <id>aliyunmaven</id> <url>//maven.aliyun.com/repository/public</url> </repository> </repositories>
Gradle
全局配置
在 ${USER_HOME}/.gradle/ 目錄下創建 init.gradle 文件,添加以下內容:
allprojects { repositories { def ALIYUN_REPOSITORY_URL = '//maven.aliyun.com/repository/public' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('//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 '//maven.aliyun.com/repository/public' } } } allprojects { repositories { maven { url '//maven.aliyun.com/repository/public' } } }
也可以直接添加在 repositories 內:
repositories { maven { url '//maven.aliyun.com/repository/public' } mavenCentral() }
其他倉庫
在上面的配置中,我們主要配置的是 public 倉庫,而 阿里雲: //maven.aliyun.com 除此之外,還代理了許多其他的倉庫,可作為下載源。如 google、spring 等(更多可點進鏈接查看詳情)。
而我們常用的 public 倉庫,其實是 central: //repo1.maven.org/maven2/ 倉庫和 jcenter: //jcenter.bintray.com/ 倉庫的聚合,所以配置了 public 倉庫,就不需要再配置 jcenter 的倉庫了。
若需要使用其他的代理倉庫,如 google、spring,可參考以下配置:
Maven
全局配置
同上,修改 settings.xml 文件:
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="//maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="//maven.apache.org/SETTINGS/1.0.0 //maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <!-- Aliyun --> <mirror> <id>alimaven-public</id> <name>aliyun public maven repo</name> <url>//maven.aliyun.com/repository/public</url> <mirrorOf>*</mirrorOf> </mirror> <mirror> <id>alimaven-google</id> <name>aliyun google maven repo</name> <url>//maven.aliyun.com/repository/google</url> <mirrorOf>*</mirrorOf> </mirror> <mirror> <id>alimaven-spring</id> <name>aliyun spring maven repo</name> <url>//maven.aliyun.com/repository/spring</url> <mirrorOf>*</mirrorOf> </mirror> <!-- Tencent Cloud --> <!-- <mirror> <id>nexus-tencentyun</id> <mirrorOf>*</mirrorOf> <name>Nexus tencentyun</name> <url>//mirrors.cloud.tencent.com/nexus/repository/maven-public/</url> </mirror> --> <!-- Netease 163 --> <!-- <mirror> <id>netease</id> <mirrorOf>*</mirrorOf> <name>Netease maven</name> <url>//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>//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>//maven.aliyun.com/repository/spring</url> </repository> </repositories>
是否開啟 releases、snapshots 版下載可根據自身需求調整。
Gradle
全局配置
allprojects { repositories { def ALIYUN_REPOSITORY_URL = '//maven.aliyun.com/repository/public' def ALIYUN_GOOGLE_URL = '//maven.aliyun.com/repository/google' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('//repo1.maven.org/maven2') || url.startsWith('//jcenter.bintray.com')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL." remove repo } if (url.startsWith('//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 '//maven.aliyun.com/repository/google' } maven { url '//maven.aliyun.com/repository/spring' } } } allprojects { repositories { maven { url '//maven.aliyun.com/repository/google' } maven { url '//maven.aliyun.com/repository/spring' } } }
其他鏡像源
騰訊雲
//mirrors.cloud.tencent.com
參考配置:
Maven
<mirror> <id>nexus-tencentyun</id> <mirrorOf>*</mirrorOf> <name>Nexus tencentyun</name> <url>//mirrors.cloud.tencent.com/nexus/repository/maven-public/</url> </mirror>
<repositories> <repository> <id>nexus-tencentyun</id> <name>Nexus tencentyun</name> <url>//mirrors.cloud.tencent.com/nexus/repository/maven-public/</url> </repository> </repositories>
Gradle
buildscript { repositories { maven { url '//mirrors.cloud.tencent.com/nexus/repository/maven-public/' } } } allprojects { repositories { maven { url '//mirrors.cloud.tencent.com/nexus/repository/maven-public/' } } }
FAQ
Q: 為什麼你配置里用的 URL 都是 //maven.aliyun.com/repository/public,而我看其他的人/文章,都用的是 //maven.aliyun.com/nexus/content/groups/public 呢?
A: 阿里雲在前幾年對 //maven.aliyun.com 進行了程式碼和架構上的改造,新版的 //maven.aliyun.com 下載速度更快,支援高並發,而且全站進行了 HTTPS 加密,更安全。而新版的 Maven Mirror 地址,就是 //maven.aliyun.com/repository/{reponame},然而阿里云為了保持舊地址的兼容,所以舊地址依然可以使用,但推薦使用新地址。
更多詳情可參考: //yq.aliyun.com/articles/621196?commentId=21341