Gradle依赖解析总是首先尝试mavenCentral?
Posted
技术标签:
【中文标题】Gradle依赖解析总是首先尝试mavenCentral?【英文标题】:Gradle dependency resolution always trying mavenCentral first? 【发布时间】:2014-02-10 00:36:25 【问题描述】:我有一个包含 javax.jms:jms:1.1 的依赖链。在 maven Central 中,该工件有一个 POM,但 jar 似乎丢失了(maven central 有问题)。但是,我们有一个本地存储库,其中包含我们需要的工件。所以,我认为这只是将我们的本地存储库放在首位,然后是 mavenCentral() 最后:
repositories
maven url 'http://local-maven:12345/repo'
mavenCentral()
但是,当运行 gradle -i 时,我们可以看到它首先查看 mavenCentral。因为它在 mavenCentral 上找到了 POM,所以它没有查看任何其他存储库,但是由于缺少 jar,构建失败:
Download http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.pom
Resource missing. [HTTP GET: http://repo1.maven.org/maven2/javax/jms/jms/1.1/jms-1.1.jar]
....
* What went wrong:
Execution failed for task 'unzipDependencies'.
> Could not resolve all dependencies for configuration 'compile'.
> Could not download artifact 'javax.jms:jms:1.1:jms.jar'
> Artifact 'javax.jms:jms:1.1:jms.jar' not found.
那么为什么它首先看 mavenCentral 呢?为什么不先查看我自己的 Maven 存储库?如果是这样,问题就会得到解决,因为它会发现 javax.jms:jms:1.1:jms.jar 很好......但我看不出有什么方法可以强制这样做。
【问题讨论】:
【参考方案1】:按照声明的顺序搜索存储库。我最好的猜测是您没有将 POM 发布到本地存储库,这就是继续搜索的原因。所以要么解决这个问题,要么告诉 Gradle Maven Central 中的一些模块在你的本地存储库中有它们的工件:
repositories
maven
url "http://repo1.maven.org/maven2"
artifactUrls "http://local-maven:12345/repo"
【讨论】:
POM 肯定在本地 maven 中。如果我完全删除 mavenCentral(),它会起作用(当然,只要我删除仅在 maven Central 中的其他依赖项)。我不想重新定义 artifactUrls,因为不是每个依赖项都在 local-maven 中,所以我仍然在某些事情上依赖 maven Central。 很难说没有看到所有的细节。无论如何,artifactUrls 配置 additional 工件 URL。它专为 Maven Central 仅包含模块的 POM 的用例而设计。它仍然会在 Maven Central 中找到所有内容。 @PeterNiederwieser 正是这为我解决了 jms-1.1.jar 的问题。我将"https://repository.jboss.org/nexus/content/groups/public"
添加为artifactUrl
。 @Depressio 请接受彼得的回答作为解决方案。【参考方案2】:
由于许可问题,JMS jar 已从 maven Central 中删除。如果您使用的是较新版本的 Gradle,则可以指定不同的 gradle 存储库作为 JMS jar 的独家提供者。这将允许您从 maven Central 中提取其余依赖项而不会出错。
repositories
mavenCentral()
exclusiveContent
forRepository
maven
url "https://repository.jboss.org/maven2"
filter
// this repository *only* contains artifacts with group "javax.jms"
includeGroup "javax.jms"
【讨论】:
以上是关于Gradle依赖解析总是首先尝试mavenCentral?的主要内容,如果未能解决你的问题,请参考以下文章
Android studio - gradle无法解析依赖项
Gradle 构建无法解析所有 Path_provider 依赖项
同步 gradle 的问题:无法解析外部依赖项 com.android.tools.build:gradle,因为没有定义存储库
gradle 到 maven 的转换,在依赖项的依赖项的版本名称中解析通配符“+”?