【问题标题】:Why would gradle not download from maven central?为什么 gradle 不能从 maven Central 下载?
【发布时间】:2018-02-05 20:46:07
【问题描述】:

由于某种原因,gradle 没有从 Maven Central 下载依赖项。我们还设置了一个私有 Nexus 存储库,出于某种原因,gradle 正在那里寻找依赖项,而不是 Maven Central。

我收到大量错误,类似于:

Failed to get resource: HEAD. [HTTP HTTP/1.1 400 Repository version policy: SNAPSHOT does not allow version: 1.5.0.RELEASE: http://*****/repository/******/io/pivotal/spring/cloud/spring-cloud-services-dependencies/1.5.0.RELEASE/spring-cloud-services-dependencies-1.5.0.RELEASE.pom]

我发誓我在第一次设置时已经解决了这个问题,但无法复制。为了让我访问 Maven Central,我必须设置代理并将 Nexus 作为代理的排除项。

这一切都可以在本地工作,但是在处理 Jenkins 和 Sonarqube 插件时会出现问题。在本地我尝试了各种代理设置(删除 systemProps 甚至系统环境变量),但错误不一样(即找不到主机)。

知道为什么它无法从 Maven Central 下载吗?


更新: 所以我能够进一步缩小范围。当使用 Jenkins 和 Sonarqube withSonarQubeEnv 块时,gradle 如何解决依赖关系会发生一些事情。见 3 个例子:

// #1 This breaks when SNAPSHOT is declared first
repositories {
    maven {   // <------------------ SNAPSHOT
        credentials {
            username usr
            password pass
        }
        url uri(snapshot)
    }
    maven {   // <------------------ RELEASE
        credentials {
            username usr
            password pass
        }
        url uri(release)
    }
    mavenCentral()    // <---------- Maven Central
}


// #2 This works since mavenCentral() is first:
repositories {
    mavenCentral()    // <---------- Maven Central
    maven {   // <------------------ SNAPSHOT
        credentials {
            username usr
            password pass
        }
        url uri(snapshot)
    }
    maven {   // <------------------ RELEASE
        credentials {
            username usr
            password pass
        }
        url uri(release)
    }
}


// #3 This also works because no failing version policy:
repositories {
    maven {   // <------------------ RELEASE
        credentials {
            username usr
            password pass
        }
        url uri(release)
    }
    mavenCentral()    // <---------- Maven Central
}

当不在 Jenkins 中使用 withSonarQubeEnv 时,这可以正常工作。为什么使用withSonarQubeEnv 时顺序很重要?

【问题讨论】:

  • 这是 SonarQube 问题吗?尝试在没有 SonarQube 的情况下使用 Jenkins 并分享结果。
  • @JeroenHeier 这是个好主意。我运行 build 而不是 sonarqube gradle 任务并收到相同的错误。我认为这与withSonarQubeEnv 设置有关。我假设代理设置正在被删除,所以我在其中添加了 withEnv 并且没有任何更改。我还检查了 gradle 守护程序日志以查看代理环境变量是否已设置,并且确实如此。另外,我添加了一个 gradle 任务来查看 gradle.properties 代理设置是否仍然存在,并且它们确实存在。不知道为什么添加 withSonarQubeEnv 会导致这种情况。有什么想法吗?
  • 我的设置类似于此链接中的 SonarQube Scanner for Gradle 部分:docs.sonarqube.org/display/SCAN/…

标签: jenkins gradle sonarqube nexus maven-central


【解决方案1】:

想通了。它与 Jenkins 中的 withSonarQubeEnv 块无关。 Sonarqube sample settings for gradle 添加了 --info 标志,我用于测试。我将其添加到我的构建步骤中并发现了相同的错误。我什至清理了 .gradle 文件夹中的缓存,但仍然下载了所有内容。

我认为 Gradle 在尝试解决依赖关系时会产生一些误导。从 SNAPSHOT 存储库中检索 RELEASE 工件时,它会发出信息消息,但它仍会继续从其他列出的存储库中检索工件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多