【问题标题】:Idea (via Gradle) "Could not resolve:" dependencies from Sonatype Nexus Proxy of mavenCentral()想法(通过 Gradle)“无法解析:”来自 mavenCentral() 的 Sonatype Nexus 代理的依赖项
【发布时间】:2018-11-18 07:19:01
【问题描述】:

我在本地网络上有一个托管的 Sonatype Nexus 存储库。它有一个 Maven 组,其中包含公共 Maven 存储库的代理存储库。过去这个配置非常棒,我遇到的问题很少。

我最近在 Nexus 存储库上配置了 https 和 ssl,因为 Docker 在 CI/CD 过程中不会轻易登录到不安全的 Nexus Docker 注册表。此时我确实最终重新配置了 Maven 存储库。

然后我更新了build.gradle

repositories {
    maven {
        credentials {
            username "${nexusUsername}"
            password "${nexusPassword}"
        }

        name = 'RepositoryName'
        url = "https://${nexusURL}:${nexusPort}/repository/maven-public"
    }
}

使用~/.gradle/gradle.properties 中定义的nexus* 变量:

nexus<Variable>=<value>

还使用 keytool 向 java jre 密钥库添加了适当的证书,并且在 Idea 的设置中添加了证书 (File &gt; Settings... : Tools &gt; Server Certificates)。

当尝试使用 Gradle 下载依赖项(通过 Maven 代理)时(通过单击 Intellij Idea 中弹出通知上的“导入更改”),构建输出显示每个依赖项的“无法解析:”。这种行为在我的所有项目中都是一致的(即使是以前能够解决依赖关系的项目)。

在大多数情况下,从命令行从项目的build.gradle 文件运行 Gradle 任务(:dependencies:idea:build)时,我能够通过 Nexus 解决依赖关系。生成的下载不适用于 Idea 中的项目。但是,在解决了一次依赖关系之后,工件会缓存在 Nexus 的 Maven 代理存储库中,从而允许 Gradle/Idea 正确解决所有依赖关系。

什么可能导致 Gradle/Idea 无法通过 Nexus 的 Maven 代理解析工件?有没有办法让 Gradle/Idea 通过 Nexus Maven 组/代理正确解决依赖关系?

目前我刚刚将mavenCentral() 添加到build.gradle 的存储库列表中,但我希望以后只包含Nexus Maven 组。缓存 1GB/s 下载的资源非常好。我还想更好地了解 Gradle/Idea 以及导致此问题的原因。

更多信息:

  • 在尝试解决此问题的过程中,Intellij Idea 已将reinstalled 升级为版本2018.2.6 Build #IC-182.5107.16。旧版本已被历史遗忘。
  • Gradle 已更新到版本 4.10.2。以前的版本是4.5.1
  • 我已经通过println 打印了每个nexus* 变量,以确保值正确。
  • Idea 的 Gradle 设置(本地 Gradle 分发、默认 Gradle 包装器、Gradle '包装器'任务配置)没有配置来解决依赖关系。
  • Every configurationof deleting at least one of./.idea./.gradle~/.gradle/caches都试过了。
  • 想法不在offline-mode 中。切换离线模式和“刷新所有 Gradle 项目”的顺序并没有改变结果。
  • 我已经使用--warning-mode all --debug 运行了 Gradle 的 dependencies 任务的 Idea 配置,并将日志与命令行上的 gradle dependencies --warning-mode all --debug 的输出进行了比较。日志似乎正在生成相同的语句(以完全不同的顺序),直到“无法解决:”消息出现在 Idea 输出中。我没有找到任何可以解释失败的附近错误消息。如果它有助于诊断问题,我可以上传这些文件。
  • 我尝试将存储库设置为直接指向 Nexus Maven 代理而不是 Maven 组。这不允许 Gradle/Idea 解决依赖关系。
  • 我应该为 Gradle 使用 http/https proxy 吗?我不明白在这种情况下使用代理的目的。
  • 我没有done anything with Grail。我不知道 Grail 是什么,并且怀疑我目前不需要它。
  • 操作系统为 Windows 10。
  • build.gradle 中使用compileimplementation 时无法解析依赖关系。
  • Transitive dependencies似乎不相关。

【问题讨论】:

    标签: gradle intellij-idea nexus sonatype maven-central


    【解决方案1】:

    我一定没有将证书添加到正确的 jre 安装中。我最近添加了它,问题已解决。

    另外,对于其他有类似问题的人来说,迷信注意事项:

    • 我在别名下添加了证书(通配符证书)(使用keytool 的-alias 命令行参数):*.example.com
    • 我还在完整地址的别名下添加了它:nexus.example.com

    我不知道其中任何一个是否对 Idea/Gradles 成功解决工件有任何影响。我相信在我添加第二个别名之前它已经工作了。

    【讨论】:

      猜你喜欢
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 2018-03-06
      • 1970-01-01
      相关资源
      最近更新 更多