阿里云云效 Maven

阿里云云效 Maven

官網:https://developer.aliyun.com/mvn/guide

阿里云Maven中央倉庫為 阿里云云效 提供的公共代理倉庫,幫助研發人員提高研發生產效率,使用阿里云Maven中央倉庫作為下載源,速度更快更穩定。

阿里云云效 是企業級一站式 DevOps 平臺,覆蓋產品從需求到運營的研發全生命周期,其中云效也提供了免費、可靠的Maven私有倉庫 Packages 和代碼管理倉庫 Codeup,歡迎您體驗使用。

云效制品倉庫 Packages 致力于幫助開發者統一管理各種開發語言在開發、構建過程中的依賴,構建成果(二進制制品)以及交付過程關鍵信息的重要組件。

云效代碼管理 Codeup 是阿里云出品的一款企業級代碼管理平臺,提供代碼托管、代碼評審、代碼掃描、代碼度量等功能,不限人數、超大容量且免費使用,全方位保護代碼資產,幫助團隊實現安全、穩定、高效的研發管理。

倉庫名稱阿里云倉庫地址阿里云倉庫地址(老版)源地址
centralhttps://maven.aliyun.com/repository/centralhttps://maven.aliyun.com/nexus/content/repositories/centralhttps://repo1.maven.org/maven2/
publichttps://maven.aliyun.com/repository/publichttps://maven.aliyun.com/nexus/content/groups/publiccentral倉和jcenter倉的聚合倉
gradle-pluginhttps://maven.aliyun.com/repository/gradle-pluginhttps://maven.aliyun.com/nexus/content/repositories/gradle-pluginhttps://plugins.gradle.org/m2/
apache snapshotshttps://maven.aliyun.com/repository/apache-snapshotshttps://maven.aliyun.com/nexus/content/repositories/apache-snapshotshttps://repository.apache.org/snapshots/

如上面的表格,列出了阿里倉庫的新地址和老版本的地址,平時我們使用新地址即可,老版本的地址也是可以使用的,比如有些依賴在新地址中可能下載不到,但是在老版本的地址中可能還能下載到,特別是一些版本比較舊的依賴。

從老版本地址中的nexus可以看出,它也是用的Nexus Repository OSS,所以阿里云鏡像加速的原理和Nexus Repository OSS是一樣的,當阿里云收到依賴請求時,它會把請求轉發給原始倉庫,比如google()倉庫,下載到依賴后緩存起來,下次再有相同的依賴請求時直接返回緩存即可,這就是加速的原理。

這個表格沒有列完整,在https://developer.aliyun.com/mvn/view中有更多的倉庫地址,當你發現一個很少見的倉庫地址時,可以到這里看看有沒有對應的鏡像地址。這個頁面中,可以看到central倉庫的類型是proxy,而public的類型是group,如下:
在這里插入圖片描述

這和Nexus Repository OSS私服倉庫中的概念是一樣一樣的。public倉庫其實是一個組,把多個倉庫組合起來,它把jcentercentral組合到一起。

Android項目默認使用的Maven倉庫都有哪些?

在Android中如何使用阿里云效Maven呢?首先我們新創建一個Android項目看看默認的倉庫地址有哪些,當前是2025年3月27日,使用最新版本Android Studio創建項目時的依賴倉庫配置如下:

pluginManagement {repositories {google {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRegex("androidx.*")}}mavenCentral()gradlePluginPortal()}
}
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()}
}

可以看到google()mavenCentral()即可用在第三方庫依賴的地方也可以用到插件的地方,這說明maven倉庫即可上傳普通的第三方庫,也可以上傳插件。而gradlePluginPortal()倉庫的名字,很明顯它只用于存儲插件。

可以在 mavenCentral()的后面添加如下代碼打印出對應的倉庫地址:

// 打印插件倉庫地址
println("Plugin Repositories:")
repositories.forEach {println("- ${(it as? MavenArtifactRepository)?.url ?: it.name}")
}

同步一下gradle,可在Build面板看到打印的倉庫地址,如下:
在這里插入圖片描述
網上還有文章說google()mavenCentral()的地址如下:

  • https://maven.google.com/
  • https://repo1.maven.org/maven2/

這和我打印的不一樣,不知道是后面發生變化了,還是地址可以有多個?

這三個倉庫的地址及阿里云鏡像地址如下:

倉庫別名官方地址阿里云鏡像地址
google()https://dl.google.com/dl/android/maven2/https://maven.aliyun.com/repository/google
mavenCentral()https://repo.maven.apache.org/maven2/https://maven.aliyun.com/repository/public
gradlePluginPortal()https://plugins.gradle.org/m2https://maven.aliyun.com/repository/gradle-plugin

完美的依賴配置

有了前面的知識后,修改Android的依賴倉庫就比較簡單了,如下:

pluginManagement {repositories {// google()倉庫的的阿里云鏡像替代maven {url = uri("https://maven.aliyun.com/repository/google")content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRegex("androidx.*")}}// mavenCentral()倉庫的阿里云鏡像替代(同時包含jcenter()倉庫)jmaven {url = uri("https://maven.aliyun.com/repository/public")}// gradlePluginPortal() 倉庫的阿里云鏡像替代maven {url = uri("https://maven.aliyun.com/repository/gradle-plugin")}// 備用官方倉庫google { // android 官方插件content {// 下面表示僅過濾以下面這些包含開頭的插件(估計Android官方插件都是以這些開頭)// 依賴地址通常由 ?Group ID、Artifact ID 和 ?Version 三部分組成:groupId:artifactId:version// “\\.” 用于匹配符號 “.”,而 “.*” 用于匹配任何字符// 在DeepSeek問為什么要加這個規則,說是以前google()倉庫還不成熟的時候,有些人為了加快訪問,也會把Android官方插件上傳到別的地方,比如jcenter,又或者是別人上傳了相同但是修改過的非法插件,// 這入這個配置之后表示只能google()倉庫下載這些插件,而且也表示google()倉庫只提供這些開頭的插件,如果也要從別的鏡像下載的話,// 則別的鏡像也要加入這個配置,這樣就表示配置有的都可以下載,沒配置有的則不行,找不到官方說法,不知道是不是這樣的。有時間可以自己創建兩個私服倉庫,然后進行實驗。includeGroupByRegex("com\\.android.*") // 匹配 com.android 開頭的組includeGroupByRegex("com\\.google.*")  // 匹配 com.google 開頭的組includeGroupByRegex("androidx.*")      // 匹配 androidx 開頭的組}}mavenCentral()       // 第三方插件gradlePluginPortal() // gradle插件以及第三方插件}
}
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {// google()倉庫的的阿里云鏡像maven { url = uri("https://maven.aliyun.com/repository/google")}// mavenCentral()倉庫的阿里云鏡像(同時包含jcenter()倉庫)jmaven {url = uri("https://maven.aliyun.com/repository/public")}// 備用官方倉庫google()       // Android官方依賴mavenCentral() // 第三方依賴}
}

注意配置倉庫的順序,當我們創建一個Android項目時,它默認的倉庫順序是這樣的:google()mavenCentral()gradlePluginPortal(),所以我們的鏡像倉庫也盡量保持這個順序。

當我們同步一個Gradle項目的時候,可以查看到哪個依賴從哪個倉庫中下載成功了,如下:
在這里插入圖片描述
下載失敗的也同樣能看到,如下:
在這里插入圖片描述
因為我們配置了多個倉庫,所以在某個倉庫下載失敗了沒關系,它還會嘗試在別的倉庫中去下載。在實際的使用中,我發現并不是這樣的,一但某個請求超時了,則認Gradle認為是致命錯誤,直接停止整個工作,不再嘗試后面別的倉庫了, Gradle 將超時視為網絡層不可用的嚴重錯誤,所以直接停止整個工作,這在使用聚合倉庫時特別容易發生超時。有3個解決辦法:

  1. 是看哪個倉庫超時了,然后把后面的倉庫往前放再重試。

  2. 在gradle.properties文件中加長超時時間或增加重試次數:

    # 連接超時60秒,讀取超時120秒
    systemProp.http.connectionTimeout=60000
    systemProp.http.readTimeout=120000
    systemProp.org.gradle.internal.http.retry.max.attempts=3  # 重試3
  3. 有些倉庫組配置了多個倉庫,如果這多個都找不到需要的資源,就會導致請求的時間更長,更容易觸發超時,所以可以選擇不使用倉庫組,每個倉庫都單獨使用。

根據經常,我感覺使用第三個方式更好一點,在我的使用場景中,公司搭了Nexus私服,所以我把阿里云代理和官方都用Nexus代理一遍,以便依賴可以緩存到公司,加快訪問,但是這時千萬別用Group,它會很容易導致超時,然后就是整個構建都停止的,根本不會說某個倉庫超時了再嘗試別的倉庫,我的項目使用示例如下:

fun RepositoryHandler.maven2(repoPath: String, includeGroups: Boolean = false) {maven {isAllowInsecureProtocol = trueurl = uri("http://192.168.1.251:8084/repository/$repoPath")if (includeGroups) {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRegex("androidx.*")}}}
}pluginManagement {fun RepositoryHandler.maven2(repoPath: String, includeGroups: Boolean = false) {maven {isAllowInsecureProtocol = trueurl = uri("http://192.168.1.251:8084/repository/$repoPath")if (includeGroups) {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRegex("androidx.*")}}}}repositories {maven2("android-google-aliyun-plugin/", true)// google()倉庫的阿里云代理maven2("android-maven-central-plugin-aliyun/")            // mavenCentral()倉庫的阿里云代理maven2("android-gradle-plugin-portal-aliyun/")            // gradlePluginPortal()倉庫的阿里云代理maven2("android-google-plugin/", true)       // google()倉庫的本地代理maven2("android-maven-central-plugin/")                   // mavenCentral()倉庫的本地代理maven2("android-gradle-plugin-portal/")                   // gradlePluginPortal()倉庫的本地代理// 備用官方倉庫google {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRegex("androidx.*")}}mavenCentral()       // 第三方插件gradlePluginPortal() // gradle插件以及第三方插件}
}
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {maven2("android-google-aliyun/")        // google()倉庫的阿里云代理maven2("android-maven-central-aliyun/") // mavenCentral()倉庫的阿里云代理maven2("android-google/")               // google()倉庫的本地代理maven2("android-maven-central/")        // mavenCentral()倉庫的本地代理// 備用官方倉庫google()       // Android官方依賴mavenCentral() // 第三方依賴}
}rootProject.name = "DayDayUp"
include(":app")

這里為了簡化倉庫配置的重復代碼創建了頂層函數maven2,但是我發現頂層函數只對dependencyResolutionManagement中的repositories 有用,對pluginManagement中的repositories不起作用,會報錯,于是我把maven2函數在pluginManagement作用域中又聲明了一次。這些倉庫里面android-google-aliyun-plugin/android-google-aliyun/是一樣的,都是代理的同一個阿里云的地址,為什么要創建不同名字的兩個倉庫,這是為了區分報錯時,通過url地址能知道它是在下載一個插件時出錯的,還是下載 一個普通第三方庫時出錯的,因為插件的地址都帶有plugin字符串。

gradlePluginPortal() 倉庫介紹

gradlePluginPortal() 這是Gradle官方的倉庫,專門用于托管 ?Gradle 官方gradle插件及第三方的gradle插件,比如:

  • 官方插件(如 org.jetbrains.kotlin.android)
  • 社區插件(如 com.github.spotbugs、io.spring.dependency-management)

gradle的官方插件通常不會托管到mavenCentral()google()

mavenCentral() 倉庫介紹

包含幾乎所有 ?非 google() 系的 Java 庫(當然也包含kotlin)。

google() 倉庫介紹

僅包含 ?Google 官方發布的庫。Google 的 Android 相關庫不在 Maven 中央倉庫發布,而是托管在獨立的 maven.google.com,即google()倉庫。官方Android庫比如:

- Android SDK 組件(如 `com.android.tools.build:gradle`)
- Material Design 庫(如 `com.google.android.material:material`)
- Firebase 服務(如 `com.google.firebase:firebase-auth`)
- Play 服務(如 `com.google.android.gms:play-services-maps`)

jitpack 倉庫介紹

另外還有倉庫也是經常能看到:https://jitpack.io,遺憾的是阿里云并未提供此倉庫的鏡像,DeepSeek對該倉庫的介紹:

JitPack 是一個托管 ?GitHub/GitLab 開源項目 的 Maven 倉庫,允許開發者直接通過 Git 倉庫地址引用依賴,例如:

implementation 'com.github.用戶名:倉庫名:版本號'

典型場景:

  • 引用 GitHub 上的個人或小型開源項目。
  • 快速測試未發布到 Maven Central 的庫。

為什么阿里云不鏡像 JitPack?

  • ?技術挑戰:JitPack 的構建是動態的(基于 Git 提交),傳統鏡像工具無法實時同步。
  • 版權風險:JitPack 上的庫版權歸屬復雜,直接鏡像可能引發法律問題。
  • 使用頻率:相比 Maven Central,JitPack 的使用場景較為小眾。

對于JitPack 倉庫,依賴下載時會走國內 CDN,實際速度可能較快,這取決于網絡,如果發現下載慢的話,可以使用私服倉庫緩存起來,或者緩存到mavenLocal()倉庫。

mavenLocal()倉庫介紹

mavenLocal()GradleMaven 構建工具中的一個特殊倉庫配置,用于從本地 Maven 緩存目錄(通常位于 ~/.m2/repository)中查找依賴。它的核心作用是讓開發者能夠優先使用本地已安裝或手動發布的庫,而非從遠程倉庫下載。

gradle默認并不會把從google()mavenCentral()等下載到的依賴緩存到mavenLocal()倉庫(~/.m2/repository),對于如何把這些倉庫下載的依賴安裝到mavenLocal()可以問DeepSeek,我懶得寫這么多了。

注意事項

  • 慎用優先級:
    若將 mavenLocal() 放在第一位,可能意外使用到本地過時或測試中的依賴,導致構建不一致。建議僅在調試時啟用。
    ?
  • 清理緩存:
    本地倉庫可能積累大量無用依賴,定期清理(刪除 ~/.m2/repository 中的舊文件)可節省空間。
    ?
  • 團隊協作問題:
    本地倉庫的內容不會同步給其他開發者,團隊項目中避免依賴 mavenLocal() 中的庫。

一些別人的參考文章

  • https://blog.csdn.net/m0_67392661/article/details/124131843 這里面有介紹到一個Maven-Search插件使用,據說搜索插件非常快。
  • https://www.cnblogs.com/chensheng0617/p/18307141

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899386.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899386.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899386.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go 語言標準庫中Channels,Goroutines詳細功能介紹與示例

在 Go 語言中,Goroutines(協程)和 Channels(通道)是并發編程的核心組件。它們共同協作,簡化了并發任務的管理和數據同步。以下通過詳細示例說明它們的用法和常見模式。 1. Goroutines(協程&…

如何在 Postman 中正確設置 Session 以維持用戶狀態?

在 Postman 里面設置有 session 的請求。如果你還不知道什么是 session,那么請看這里—— session 是一種記錄客戶端和服務器之間狀態的機制,用于保持用戶的登錄狀態或者其他數據,從而讓用戶在不同頁面之間保持一致的體驗。 Postman 設置帶 …

DQN與PPO在算法層面的核心區別

DQN與PPO在算法層面的核心區別 1. 學習目標不同 DQN(基于價值): 核心:學習動作價值函數 Q ( s , a ) Q(s, a)

Linux: 網絡,arp的數量為什么會對交換機/路由器有性能的影響

這個問題也是非常普遍的問題。比如最近比較火的一個OVS相關的問題: ARP request packets put high pressure on the pinctrl thread in ovn-controller 另一個在工作種也遇到了相似的問題,當一個網絡里發了同時發了小一百個GARP之后,路由器的gateway就會有ARP處理延遲。 A…

解析 HTML 網站架構規范

2025/3/28 向全棧工程師邁進! 一、網頁基本的組成部分 網頁的外觀多種多樣,但是除了全屏視頻或游戲,或藝術作品頁面,或只是結構不當的頁面以外,都傾向于使用類似的標準組件。 1.1頁眉 通常橫跨于整個頁面頂部有一…

Golang 當中 byte 和 rune 類型的區別

文章目錄 Golang 當中 byte 和 rune 類型的區別類型定義與用途字符串處理差異內存占用典型引用場景 Golang 當中 byte 和 rune 類型的區別 在 Golang 中,rune 和 byte 類型的區別主要體現在字符處理的方式和編碼支持上。 類型定義與用途 byte 類型 本質是 uint8…

vue將頁面導出成word

方法一:使用 html-docx-js html-docx-js 是一個輕量級的庫,可以將 HTML 轉換為 Word 文檔。 安裝依賴 首先安裝 html-docx-js: Bash深色版本 npm install html-docx-js --save創建導出邏輯 在 Vue 組件中實現導出功能的代碼如下&#xff1…

Three.js 快速入門教程【二十】3D模型加載優化實戰:使用gltf-pipeline與Draco對模型進行壓縮,提高加載速度和流暢性

系列文章目錄 Three.js 快速入門教程【一】開啟你的 3D Web 開發之旅 Three.js 快速入門教程【二】透視投影相機 Three.js 快速入門教程【三】渲染器 Three.js 快速入門教程【四】三維坐標系 Three.js 快速入門教程【五】動畫渲染循環 Three.js 快速入門教程【六】相機控件 Or…

前端框架入門:Angular

Angular 是由 Google 維護的前端框架,適用于構建單頁應用(SPA)。它使用TypeScript 作為主要開發語言,并提供了強大的模塊化、依賴注入(DI)、路由管理等特性。 一、Angular 基礎 1. Angular 介紹 Angular 是一個組件化、模塊化、雙向數據綁定的前端框架,適用于構建復雜…

基于51單片機的速度檢測報警器proteus仿真

地址: https://pan.baidu.com/s/1I7roZEjrk349Is_YdMcsxQ 提取碼:1234 仿真圖: 芯片/模塊的特點: AT89C52/AT89C51簡介: AT89C51 是一款常用的 8 位單片機,由 Atmel 公司(現已被 Microchip 收…

具身系列——Diffusion Policy算法實現CartPole游戲

代碼原理分析 1. 核心思想 該代碼實現了一個基于擴散模型(Diffusion Model)的強化學習策略網絡。擴散模型通過逐步去噪過程生成動作,核心思想是: ? 前向過程:通過T步逐漸將專家動作添加高斯噪聲,最終變成…

DeepSeek 本地化部署教程

1 概述 1.1 配置參考圖 科普: B,Billion(十億),是 “參數量” 的單位。 模型量超過 一億,可稱之為 “大模型”。 2 軟件安裝 2.1 下載 Ollama 官方主頁:https://ollama.com/download主頁截圖…

matlab打開兩個工程

1、問題描述 寫代碼時,需要實時參考別人的代碼,需要同時打開2個模型,當模型在同一個工程內時,這是可以直接打開的,如圖所示 2、解決方案 再打開一個MATLAB主窗口 這個時候就可以同時打開多個模型了 3、正確的打開方…

mac 下配置flutter 總是失敗,請參考文章重新配置flutter 環境MacOS Flutter環境配置和安裝

一、安裝和運行Flutter的系統環境要求 想要安裝并運行 Flutter,你的開發環境需要最低滿足以下要求: 操作系統:macOS磁盤空間:2.8 GB(不包括IDE/tools的磁盤空間)。工具:Flutter使用git進行安裝和升級。我們建議安裝Xcode,其中包括git&#x…

第4.1節:使用正則表達式

1 第4.1節:使用正則表達式 將正則表達式用斜杠括起來,就能用作模式。隨后,該正則表達式會與每條輸入記錄的完整文本進行比對。(通常情況下,它只需匹配文本的部分內容就能視作匹配成功。)例如,以…

Java 代理(一) 靜態代理

學習代理的設計模式的時候,經常碰到的一個經典場景就是想統計某個方法的執行時間。 1 靜態代理模式的產生 需求1. 統計方法執行時間 統計方法執行時間,在很多API/性能監控中都有這個需求。 下面以簡單的計算器為例子,計算加法耗時。代碼如下…

每日總結3.28

藍橋刷題 3227 找到最多的數 方法一&#xff1a;摩爾投票法 #include <bits/stdc.h> using namespace std; #define int long long signed main() { int n,m; cin>>n>>m; int a[m*n]; for(int i0;i<n*m;i) { cin>>a[i]; } int cand…

Flutter快速搭建聊天

之前項目中使用的環信聊天&#xff0c;我們的App使用的Flutter開發的 。 所以&#xff0c;就使用的 em_chat_uikit &#xff0c;這個是環信開發的Flutter版本的聊天。 一開始&#xff0c;我們也用的環信的聊天&#xff0c;是收費的&#xff0c;但是&#xff0c;后面就發現&…

Sa-Token

簡介 Sa-Token 是一個輕量級 Java 權限認證框架&#xff0c;主要解決&#xff1a;登錄認證、權限認證、單點登錄、OAuth2.0、分布式Session會話、微服務網關鑒權 等一系列權限相關問題。 官方文檔 常見功能 登錄認證 本框架 用戶提交 name password 參數&#xff0c;調用登…

基于javaweb的SSM航班機票預訂平臺系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…