我已经解决了这个问题,但我仍然很好奇为什么 gradle 会这样。
在我的 gradle 项目中,我有 2 个 gradle 项目,一个使用 ear
插件配置的命名应用程序和一个部署在 Ear 的 lib 文件夹中的命名核心
我在尝试构建我的 gradle 项目时遇到以下错误:
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all dependencies for configuration ':app:earlib'.
> Could not find org.slf4j:slf4j-api:1.7.5.
Required by:
saturn:app:unspecified > saturn:core:unspecified
> Could not find commons-io:commons-io:2.4.
Required by:
saturn:app:unspecified > saturn:core:unspecified
> Could not find org.slf4j:slf4j-log4j12:1.7.5.
Required by:
saturn:app:unspecified > saturn:core:unspecified
> Could not find log4j:log4j:1.2.17.
Required by:
saturn:app:unspecified > saturn:core:unspecified
我的应用程序 build.gradle 文件是:
apply plugin: 'ear'
dependencies {
earlib project(":core")
}
我的核心 build.gradle 是:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'org.slf4j:slf4j-api:1.7.5'
runtime 'org.slf4j:slf4j-log4j12:1.7.5'
runtime 'log4j:log4j:1.2.17'
testCompile 'junit:junit:4.11'
}
临时解决方案:
我能够通过将 mavenCentral 存储库添加到我的应用程序 build.gradle 来解决该问题,如下所示:
apply plugin: 'ear'
repositories {
mavenCentral()
}
dependencies {
earlib project(':core')
}
但是我仍然很好奇为什么依赖项目需要知道核心项目从哪个存储库解析其依赖项。这个document on dependency management似乎没有很好的解释。
最佳答案
解析配置时,Gradle(仅)使用在同一项目中声明的存储库作为配置。因此,在解析ear项目的earlib
配置时,仅考虑ear项目的存储库。这就是为什么通常在根构建脚本中的 subprojects
下声明所有存储库的原因之一。
关于java - 无法解析配置 X 的所有依赖项,无法找到 B > A 所需的 Z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21177218/