网站信息报送制度建设,网站开发用什么软件有哪些,群晖 wordpress 目录,店面logo设计制作阿里云云效 Maven
官网#xff1a;https://developer.aliyun.com/mvn/guide
阿里云Maven中央仓库为 阿里云云效 提供的公共代理仓库#xff0c;帮助研发人员提高研发生产效率#xff0c;使用阿里云Maven中央仓库作为下载源#xff0c;速度更快更稳定。
阿里云云效 是企业…阿里云云效 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仓库其实是一个组把多个仓库组合起来它把jcenter和central组合到一起。
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/googlemavenCentral()https://repo.maven.apache.org/maven2/https://maven.aliyun.com/repository/publicgradlePluginPortal()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个解决办法 是看哪个仓库超时了然后把后面的仓库往前放再重试。 在gradle.properties文件中加长超时时间或增加重试次数 # 连接超时60秒读取超时120秒
systemProp.http.connectionTimeout60000
systemProp.http.readTimeout120000
systemProp.org.gradle.internal.http.retry.max.attempts3 # 重试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-mapsjitpack 仓库介绍
另外还有仓库也是经常能看到https://jitpack.io遗憾的是阿里云并未提供此仓库的镜像DeepSeek对该仓库的介绍
JitPack 是一个托管 GitHub/GitLab 开源项目 的 Maven 仓库允许开发者直接通过 Git 仓库地址引用依赖例如
implementation com.github.用户名:仓库名:版本号典型场景
引用 GitHub 上的个人或小型开源项目。快速测试未发布到 Maven Central 的库。
为什么阿里云不镜像 JitPack
技术挑战JitPack 的构建是动态的基于 Git 提交传统镜像工具无法实时同步。版权风险JitPack 上的库版权归属复杂直接镜像可能引发法律问题。使用频率相比 Maven CentralJitPack 的使用场景较为小众。
对于JitPack 仓库依赖下载时会走国内 CDN实际速度可能较快这取决于网络如果发现下载慢的话可以使用私服仓库缓存起来或者缓存到mavenLocal()仓库。
mavenLocal()仓库介绍
mavenLocal() 是 Gradle 和 Maven 构建工具中的一个特殊仓库配置用于从本地 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