如何在Gradle中配置无HTTPS的私有Nexus仓库以开发Java应用?
修复Gradle发布到Nexus及依赖拉取问题
一、解决发布项目的publishing()方法找不到问题
你的发布项目报错是因为缺少maven-publish插件,且使用了Gradle已废弃的mavenDeployer配置方式,按以下步骤修改:
1. 添加maven-publish插件
在plugins块中加入maven-publish插件:
plugins { id 'org.springframework.boot' version '2.7.5' id 'io.spring.dependency-management' version '1.0.14.RELEASE' id 'java' id 'maven-publish' // 新增这个插件 }
2. 重构发布配置(替换旧的mavenDeployer)
删除原来的publishing块,替换为Gradle 7.x支持的maven-publish配置:
publishing { publications { maven(MavenPublication) { // 从Java组件发布普通jar(而非Spring Boot可执行jar) from components.java // 构件坐标,可直接复用项目根配置,也可单独指定 groupId = 'com.model' artifactId = 'm-entities' version = '0.0.1-SNAPSHOT' } } repositories { maven { url = uri("http://localhost:8081/repository/model-snapshot/") allowInsecureProtocol = true // 允许HTTP非加密访问 credentials { username = 'user' // Nexus的上传权限账号 password = '1' // 对应密码 } } } }
3. 确保发布普通jar(关键)
Spring Boot项目默认生成可执行jar,这种jar无法被其他项目作为依赖引用,需配置生成普通jar:
// 禁用Spring Boot可执行jar任务(如果不需要的话) tasks.named('bootJar') { enabled = false } // 确保普通jar任务启用 tasks.named('jar') { enabled = true }
4. 执行发布命令
在项目根目录运行:
./gradlew publish
Windows系统使用gradlew publish
二、解决依赖拉取的401认证错误
出现401 Unauthorized错误,按以下排查修复:
1. 检查Nexus账号权限
登录Nexus后台,确认user账号拥有读取model-snapshot仓库的权限:
- 进入
Security->Roles,找到账号关联的角色,确保包含nx-repository-view-maven2-model-snapshot-read权限,无权限则添加。
2. 核对账号密码
确认gradle.properties里的repoUser和repoPassword与Nexus后台账号密码完全一致,注意大小写、特殊字符。
3. 检查仓库匿名访问设置
如果model-snapshot仓库关闭了匿名访问,必须通过认证拉取依赖,你的现有配置已添加credentials块,只需确保账号有权限即可。
4. 验证依赖坐标
确认引用的依赖坐标和发布构件完全匹配:
implementation 'com.model:m-entities:0.0.1-SNAPSHOT'
需与发布时的groupId、artifactId、version一一对应。
三、验证流程
- 先成功发布构件,在Nexus后台
model-snapshot仓库中能找到com/model/m-entities/0.0.1-SNAPSHOT目录及相关文件。 - 刷新引用项目的Gradle依赖,执行
./gradlew build,确认无401错误,依赖拉取正常。
内容的提问来源于stack exchange,提问作者skyho
相关产品推荐
相关产品推荐

