【发布时间】: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 > Settings... : Tools > 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中使用compile或implementation时无法解析依赖关系。 - Transitive dependencies似乎不相关。
【问题讨论】:
标签: gradle intellij-idea nexus sonatype maven-central