gradle与maven仓库镜像的等价物是什么?

1l5u6lss  于 2023-08-03  发布在  Maven
关注(0)|答案(3)|浏览(127)

在使用Maven项目时,我喜欢配置一个本地镜像(例如:Artifactory)用于各种第三方存储库。我通过主目录中的settings.xml文件来完成这一操作。
我找不到类似的Gradle设置--所有文档似乎都建议 * 添加一个新的存储库 *,而不是代理/镜像对已经定义的repos的调用。这并不具有相同的效果。有没有一种简单的方法在Gradle中代理远程Maven或Ivy仓库?

xbp102n0

xbp102n01#

您可以定义自定义存储库,例如:

// build.gradle or settings.gradle
repositories {
  maven {
    url "http://repo1.mycompany.com/maven2"
  }
  maven {
    url "http://repo2.mycompany.com/maven2"
  }
}

字符串
如果要跨项目共享此定义,请将其移动到init script

wfsdck30

wfsdck302#

我们有一个内部Artifactory仓库,它配置了库和插件、发布版本和快照版本的单独路径。作为~/.m2/settings.xml的等价物,我使用了下面的~/.gradle/init.gradle文件:

allprojects {
    buildscript {
        repositories {
            mavenLocal()
            maven { url "https://internal.example.com/artifactory/libs-releases" }
            maven { url "https://internal.example.com/artifactory/libs-snapshots" }
            maven { url "https://internal.example.com/artifactory/atlassian-cache" }
        }
    }

    repositories {
        mavenLocal()
        maven { url "https://internal.example.com/artifactory/plugins-releases" }
        maven { url "https://internal.example.com/artifactory/plugins-snapshots" }
        maven { url "https://internal.example.com/artifactory/atlassian-cache" }
    }
}

字符串

  • buildscript块指的是你构建中使用的gradle插件的搜索位置。
  • 第二个repositories块指的是你项目的依赖项的搜索位置。
  • mavenLocal()是指本地文件系统存储库~/.m2/repository

更多信息:

egmofgnx

egmofgnx3#

Gradle为maven仓库设置镜像的最佳方法是修改init.gradle或init. gradle. kts中的url。
例如,我想把mavenCentral()镜像到'https://mirrors.tencent.com/nexus/repository/maven-public/',把gradlePluginPortal()镜像到'https://mirrors.tencent.com/nexus/repository/gradle-plugins/',只要把代码放在<UserDir>/.gradle/init.gradle.kts中即可:

fun RepositoryHandler.enableMirror() {
    all {
        if (this is MavenArtifactRepository) {
            val originalUrl = this.url.toString().removeSuffix("/")
            urlMappings[originalUrl]?.let {
                logger.lifecycle("Repository[$url] is mirrored to $it")
                this.setUrl(it)
            }
        }
    }
}

val urlMappings = mapOf(
    "https://repo.maven.apache.org/maven2" to "https://mirrors.tencent.com/nexus/repository/maven-public/",
    "https://dl.google.com/dl/android/maven2" to "https://mirrors.tencent.com/nexus/repository/maven-public/",
    "https://plugins.gradle.org/m2" to "https://mirrors.tencent.com/nexus/repository/gradle-plugins/"
)

gradle.allprojects {
    buildscript {
        repositories.enableMirror()
    }
    repositories.enableMirror()
}

gradle.beforeSettings { 
    pluginManagement.repositories.enableMirror()
    dependencyResolutionManagement.repositories.enableMirror()
}

字符串
它将由您设备上的每个本地项目加载。不再修改项目的源代码。

相关问题