部署Jar包到本地Nginx搭建的Maven仓库时Gradle发布任务报错
问题核心原因
你的Nginx配置与Gradle发布配置的路径映射不匹配是最常见的触发原因:Nginx的root指向/var/www/html,根路径/直接映射到该目录,但Gradle配置的发布地址是http://localhost/repository,对应Nginx本地路径为/var/www/html/repository,该目录如果不存在、权限不足,或者路径配置错误都会触发报错。
排查步骤
- 验证路径可访问性:用带凭据的curl命令测试Gradle配置的目标路径是否可上传,执行命令:
curl -u myusername:mypassword -T test.jar http://localhost/repository/test.jar
- 若返回404:说明路径不存在,优先检查
/var/www/html/repository目录是否存在 - 若返回401:说明凭据错误,核对
.htpasswd文件中生成的账号密码是否与Gradle配置一致 - 若返回403:说明目录权限不足,确认Nginx运行用户(通常是
www-data)对目标目录有读写权限 - 检查Gradle代理配置:查看
~/.gradle/gradle.properties文件是否配置了全局HTTP代理,若存在代理配置,需要添加跳过localhost的规则:
systemProp.http.nonProxyHosts=localhost systemProp.https.nonProxyHosts=localhost
- 检查HTTP仓库允许配置:Gradle默认会限制非HTTPS协议的仓库,4.4.1版本也需要显式开启允许HTTP仓库的配置。
修复方案
方案1:修正Gradle配置(操作最简单)
如果你的Maven仓库文件直接存放在/var/www/html根目录下,直接修改publish.gradle的仓库url,同时添加允许HTTP仓库的配置即可:
apply plugin: "maven-publish" publishing { repositories { maven { name 'MyRepo' // 去掉多余的/repository路径,和Nginx的根路径映射对齐 url "http://localhost/" allowInsecureProtocol = true credentials { username = "myusername" password = "mypassword" } } } publications { jarApp(MavenPublication) { groupId "com.sample.package" artifactId "Sample" version "1.0" artifact ("sample.jar") } } }
方案2:保留/repository路径的配置
如果你希望用/repository作为仓库访问路径,先创建对应目录并配置权限:
sudo mkdir -p /var/www/html/repository sudo chown -R www-data:www-data /var/www/html/repository sudo chmod -R 775 /var/www/html/repository
再在publish.gradle的maven配置块中添加allowInsecureProtocol = true即可。
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

