Gradle 版本目录(已发布):如何动态设置存储库
Gradle Version Catalog (Published): How to dynamically set up repository
我对 Gradle 没有那么多经验,目前 运行 在尝试使用新版本目录功能时遇到问题。
目标:
- 在第二个项目中使用 Gradle 7.4.2 版本目录,在独立 GIT 存储库中管理并发布到私有 JFrog artifactory。
- 每个项目成员的人工凭证已经在
$HOME/.gradle/gradle.properties
中可用(由 JFrog 自动生成)并且应该被重新使用。
问题:
- 根据current Gradle documentation,任何要使用该目录的项目都应该在
settings.gradle(.kts)
中定义已发布的版本目录;
插入那段代码会导致错误,因为 Gradle 没有可用于工件查找的存储库定义
- 因此,添加存储库定义:
// my settings.gradle.kts
rootProject.name = "catalog-consumer"
dependencyResolutionManagement {
val catalogVersion = "0.1.0"
val artifactoryUri = "..."
val catalogGAV = "..."
repositories{
maven {
url = uri("$artifactoryUri")
credentials {
// TODO: how to access user's local gradle.properties for credentials?
username = "$artifactory_user" // key as generated by JFrog
password = "$artifactory_password" // key as generated by JFrog
}
}
}
versionCatalogs {
create("libs") {
from("$catalogGAV")
}
}
}
- 现在,面临用户的
gradle.properties
似乎尚未加载的问题 - 但硬编码凭据不可行 :)
问题:
手动检查和加载用户的 gradle.properties
文件是唯一的选择吗?
最初,在阅读文档时,我假设设置文件可能会尝试从项目的 build.gradle.kts
中查找现有的存储库定义,但事实也并非如此。如果我理解正确的话,设置文件先于其他一切被评估,不是吗?
手动加载用户的配置对我来说似乎很奇怪,因此,我想问一下我是否缺少一个机制或生命周期钩子来处理这个问题。也可能是我错误地使用了版本目录功能:D
非常感谢任何提示!
在此处查看文档:https://docs.gradle.org/current/userguide/declaring_repositories.html#sec:handling_credentials
命名存储库凭据
如果您命名存储库并添加 credentials(PasswordCredentials::class)
...
// ./settings.gradle.kts
dependencyResolutionManagement {
repositories {
maven {
name = "mySecureRepository"
credentials(PasswordCredentials::class)
// url = uri(<<some repository url>>)
}
}
}
然后 Gradle 将 automatically fetch the username/pass 来自第一个找到的定义:
- 使用命令行参数
./gradlew build -PmySecureRepositoryUsername=my-username
- 前缀为
ORG_GRADLE_PROJECT_
的环境变量(这对CI/CD很有用)
ORG_GRADLE_PROJECT_mySecureRepositoryUsername=my-username
ORG_GRADLE_PROJECT_mySecureRepositoryPassword=my-password
$GRADLE_USER_HOME/gradle.properties
mySecureRepositoryUsername=my-username
mySecureRepositoryPassword=my-password
gradle.properties
在项目根目录中 - 显然不要将凭据放入您的项目中!
gradle.properties
在Gradle安装目录下
手动供应商
如果您需要手动设置 属性 名称,那么您可以定义自己的提供商。
// ./settings.gradle.kts
val artifactoryUser = providers.gradleProperty("artifactory_user")
val artifactoryPassword = providers.gradleProperty("artifactory_password")
dependencyResolutionManagement {
repositories {
maven {
name = "mySecureRepository"
credentials {
username = artifactoryUser.get()
password = artifactoryPassword.get()
}
// url = uri(<<some repository url>>)
}
}
}
同样,然后 Gradle 将从
中获取这些属性
$GRADLE_USER_HOME/gradle.properties
artifactory_user=my-username
artifactory_password=my-password
- 或者环境变量
ORG_GRADLE_PROJECT_artifactory_user=myUsername
ORG_GRADLE_PROJECT_artifactory_password=my-password
我对 Gradle 没有那么多经验,目前 运行 在尝试使用新版本目录功能时遇到问题。
目标:
- 在第二个项目中使用 Gradle 7.4.2 版本目录,在独立 GIT 存储库中管理并发布到私有 JFrog artifactory。
- 每个项目成员的人工凭证已经在
$HOME/.gradle/gradle.properties
中可用(由 JFrog 自动生成)并且应该被重新使用。
问题:
- 根据current Gradle documentation,任何要使用该目录的项目都应该在
settings.gradle(.kts)
中定义已发布的版本目录;
插入那段代码会导致错误,因为 Gradle 没有可用于工件查找的存储库定义 - 因此,添加存储库定义:
// my settings.gradle.kts
rootProject.name = "catalog-consumer"
dependencyResolutionManagement {
val catalogVersion = "0.1.0"
val artifactoryUri = "..."
val catalogGAV = "..."
repositories{
maven {
url = uri("$artifactoryUri")
credentials {
// TODO: how to access user's local gradle.properties for credentials?
username = "$artifactory_user" // key as generated by JFrog
password = "$artifactory_password" // key as generated by JFrog
}
}
}
versionCatalogs {
create("libs") {
from("$catalogGAV")
}
}
}
- 现在,面临用户的
gradle.properties
似乎尚未加载的问题 - 但硬编码凭据不可行 :)
问题:
手动检查和加载用户的 gradle.properties
文件是唯一的选择吗?
最初,在阅读文档时,我假设设置文件可能会尝试从项目的 build.gradle.kts
中查找现有的存储库定义,但事实也并非如此。如果我理解正确的话,设置文件先于其他一切被评估,不是吗?
手动加载用户的配置对我来说似乎很奇怪,因此,我想问一下我是否缺少一个机制或生命周期钩子来处理这个问题。也可能是我错误地使用了版本目录功能:D
非常感谢任何提示!
在此处查看文档:https://docs.gradle.org/current/userguide/declaring_repositories.html#sec:handling_credentials
命名存储库凭据
如果您命名存储库并添加 credentials(PasswordCredentials::class)
...
// ./settings.gradle.kts
dependencyResolutionManagement {
repositories {
maven {
name = "mySecureRepository"
credentials(PasswordCredentials::class)
// url = uri(<<some repository url>>)
}
}
}
然后 Gradle 将 automatically fetch the username/pass 来自第一个找到的定义:
- 使用命令行参数
./gradlew build -PmySecureRepositoryUsername=my-username
- 前缀为
ORG_GRADLE_PROJECT_
的环境变量(这对CI/CD很有用)ORG_GRADLE_PROJECT_mySecureRepositoryUsername=my-username ORG_GRADLE_PROJECT_mySecureRepositoryPassword=my-password
$GRADLE_USER_HOME/gradle.properties
mySecureRepositoryUsername=my-username mySecureRepositoryPassword=my-password
gradle.properties
在项目根目录中 - 显然不要将凭据放入您的项目中!gradle.properties
在Gradle安装目录下
手动供应商
如果您需要手动设置 属性 名称,那么您可以定义自己的提供商。
// ./settings.gradle.kts
val artifactoryUser = providers.gradleProperty("artifactory_user")
val artifactoryPassword = providers.gradleProperty("artifactory_password")
dependencyResolutionManagement {
repositories {
maven {
name = "mySecureRepository"
credentials {
username = artifactoryUser.get()
password = artifactoryPassword.get()
}
// url = uri(<<some repository url>>)
}
}
}
同样,然后 Gradle 将从
中获取这些属性$GRADLE_USER_HOME/gradle.properties
artifactory_user=my-username artifactory_password=my-password
- 或者环境变量
ORG_GRADLE_PROJECT_artifactory_user=myUsername ORG_GRADLE_PROJECT_artifactory_password=my-password