在build.gradle中如何提取和重用Maven存储库配置?

Har*_*own 6 groovy closures gradle build.gradle

我有这个build.gradle文件:

repositories {
    maven {
        credentials {
            username "$artifactory_user"
            password "$artifactory_password"
        }
        url 'http://some.domain/artifactory/repo'
    }
}

publishing {
    repositories {
        publications {
            maven(MavenPublication) {
                from components.java
            }
        }
        maven {
            credentials {
                username "$artifactory_user"
                password "$artifactory_password"
            }
            url 'http://some.domain/artifactory/repo'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想提取并重用 Maven 存储库定义。

这是行不通的:

repositories {
    mavenRepository()
}

publishing {
    repositories {
        publications {
            maven(MavenPublication) {
                from components.java
            }
        }
        mavenRepository()
    }
}

private void mavenRepository() {
    maven {
        credentials {
            username "$artifactory_user"
            password "$artifactory_password"
        }
        url 'http://some.domain/artifactory/repo'
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是

在 org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler 类型的存储库容器上找不到参数 [gradle-dev] 的方法 mavenRepository()。

我怎样才能实现这个目标?

Ali*_*yre 3

假设您有一个单独的 repositories.gradle 文件并命名您的 Maven 存储库..

maven {
    name 'myrepo'
    url 'https://xxxx'
    credentials {
        username = System.getenv("xxx") ?: "${xxx}"
        password = System.getenv("xxx") ?: "${xxx}"
    }
}
maven { name 'anotherrepo' }
Run Code Online (Sandbox Code Playgroud)

然后在根项目级别您可以运行:

apply from: "$rootDir/gradle/repositories.gradle"
Run Code Online (Sandbox Code Playgroud)

这将使用所有存储库填充存储库。然后要在其他地方填充特定的一个,您可以使用:

repositories.add(rootProject.repositories.getByName('myrepo'))
Run Code Online (Sandbox Code Playgroud)

我在此博客页面上找到了答案: https: //themightyprogrammer.dev/snippet/reusing-gradle-repo 感谢 mightprogrammer!