我在本地网络上托管了Sonatype Nexus存储库。它有一个Maven组,其中包含用于公共(public)Maven存储库的代理存储库。在过去,这种配置非常出色,我遇到的问题很少。
我最近在Nexus信息库上配置了https和ssl,因为在CI / CD流程中Docker不会轻易登录到不安全的Nexus Docker注册表中。至此,我确实重新配置了Maven存储库。
然后我更新了build.gradle
:
repositories {
maven {
credentials {
username "${nexusUsername}"
password "${nexusPassword}"
}
name = 'RepositoryName'
url = "https://${nexusURL}:${nexusPort}/repository/maven-public"
}
}
与在
nexus*
中定义的~/.gradle/gradle.properties
变量:nexus<Variable>=<value>
我还使用keytool将适当的证书添加到java jre密钥库中,并将证书添加到Idea的设置(
File > Settings... : Tools > Server Certificates
)中。尝试使用Gradle(通过在Intellij Idea中的弹出通知中单击“导入更改”)(通过Maven代理)下载依赖项时,对于每个依赖项,Build输出都会显示“无法解析:
在大多数情况下,从命令行的项目
:dependencies
文件中运行Gradle任务(:idea
,:build
,build.gradle
)时,我在大多数情况下都能够通过Nexus解决依赖项。结果下载不适用于Idea中的项目。但是,一旦解决了依赖性, Artifact 就会被缓存在Nexus的Maven代理存储库中,从而使Gradle / Idea能够正确解决所有依赖性。是什么原因导致Gradle / Idea无法通过Nexus的Maven代理解析 Artifact ?有没有办法让Gradle / Idea通过Nexus Maven组/代理正确解决依赖关系?
目前,我只是将
mavenCentral()
添加到build.gradle
的存储库列表中,但我希望以后仅包括Nexus Maven组。缓存1GB / s下载资源非常好。我也想更好地了解Gradle / Idea以及造成此问题的原因。更多信息:
2018.2.6 Build #IC-182.5107.16
版本。旧版本已不复存在。 4.10.2
。以前的版本是4.5.1
。 nexus*
打印了每个println
变量,以确保值正确。 ./.idea
,./.gradle
和~/.gradle/caches
。 dependencies
运行了Gradle的--warning-mode all --debug
任务的Idea配置,并将日志与命令行上gradle dependencies --warning-mode all --debug
的输出进行了比较。在“想法”输出中出现“无法解决:”消息之前,日志似乎会产生相同的语句(顺序完全不同)。我没有发现任何附近的错误消息可以解释该失败。如果可以帮助诊断问题,则可以上传这些文件。 compile
中使用implementation
或build.gradle
时,无法解决最佳答案
我一定没有将证书添加到正确的jre安装中。我最近才添加它,此问题已解决。
此外,迷信笔记给其他有类似问题的人:
keytool
的-alias命令行参数):*.example.com
nexus.example.com
我不知道这两个因素是否对Idea / Gradles在解决 Artifact 方面的成功有任何影响。我相信它在我添加第二个别名之前是可行的。
关于gradle - 来自mavenCentral()的Sonatype Nexus Proxy的Idea(通过Gradle) “Could not resolve:”依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53358704/