gradle 配置私有仓库认证应避免硬编码凭证,推荐通过环境变量(repo_user/repo_password)或 gradle.properties(repo.username/password)安全传入,并在 maven 仓库块中引用;同时需为账号配置 nexus 最小化权限(如仅 browse、add、edit),并优先使用 token 认证(用户名设为 "token",密码为 repo_token)。

最稳妥的做法是用环境变量或 `gradle.properties` 文件管理凭证,再在 `repositories` 块中引用。下面分场景说明关键配置方式:
用环境变量传递用户名和密码
适合 CI/CD 环境(如 Jenkins、GitLab CI),也便于本地统一管理。
- 在系统或 CI 中设置两个环境变量:
REPO_USER和REPO_PASSWORD - 在
settings.gradle.kts或build.gradle.kts中这样写:
maven {
url = uri("https://repo.yourcompany.com/maven2/")
credentials {
username = providers.environmentVariable("REPO_USER").get()
password = providers.environmentVariable("REPO_PASSWORD").get()
}
}
Gradle 会自动读取并注入,敏感信息不暴露在代码中。
用 gradle.properties 存储凭证
适合开发团队本地协作,但需确保该文件不提交到 Git(加进 .gitignore)。
- 在项目根目录的
gradle.properties文件里添加:
repo.username=deployer repo.password=your-secure-token-here
- 在仓库配置中通过
project.findProperty()读取(Groovy)或providers.systemProperty()(Kotlin):
maven {
url = "https://repo.yourcompany.com/maven2/"
credentials {
username = project.findProperty("repo.username") as String ?: ""
password = project.findProperty("repo.password") as String ?: ""
}
}
配合 Nexus 权限做最小化授权
账号本身要严格限制权限,不是配对成功就行。
- Nexus 后台创建专用用户(比如叫
gradle-deployer),不要用admin - 只分配必要权限:对应仓库的 browse、add、edit(上传和覆盖需要),不需要 delete 或 admin 权限
- 若区分 release/snapshot,可为不同仓库配置不同账号,或用同一账号但限定
content { includeGroup(...) }范围
补充:支持 Token 认证(推荐用于现代 Nexus/Artifactory)
很多私仓已支持 Bearer Token 或 API Key 方式,更安全且易轮换。
- 将 token 存入环境变量
REPO_TOKEN - 配置时改用
authentication的 header 方式(需插件支持,如http-header插件),或直接设为 password(部分 Nexus 版本接受 token 当 password) - 示例(兼容写法):
maven {
url = "https://repo.yourcompany.com/maven2/"
credentials {
username = "token" // Nexus 要求用户名为 token
password = providers.environmentVariable("REPO_TOKEN").get()
}
}
凭证配置本身不复杂,但安全性和可维护性取决于你怎么存、谁有权改、权限是否最小化。选对方式,能省去后期排查“401 Unauthorized”的大部分时间。











