You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:36:06