无法解析配置 X 的所有依赖项,无法找到 B > A 所需的 Z

cod*_*het 2 java groovy gradle jakarta-ee

我已经解决了这个问题,但我仍然很好奇为什么 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
Run Code Online (Sandbox Code Playgroud)

我的应用程序 build.gradle 文件是:

apply plugin: 'ear'

dependencies {
    earlib project(":core")
}
Run Code Online (Sandbox Code Playgroud)

我的核心 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'
}
Run Code Online (Sandbox Code Playgroud)

临时解决方案:

我能够通过将 mavenCentral 存储库添加到我的应用程序 build.gradle 来解决该问题,如下所示:

apply plugin: 'ear'

repositories {
    mavenCentral()
}

dependencies {
    earlib project(':core')
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然很好奇为什么依赖项目需要知道核心项目从哪个存储库解析其依赖项。这个关于依赖管理的文档似乎没有很好的解释。

Pet*_*ser 5

解析配置时,Gradle(仅)使用在同一项目中声明的存储库作为配置。因此,在解析 Ear 项目的earlib配置时,仅考虑 Ear 项目的存储库。subprojects这就是为什么通常在根构建脚本中声明所有存储库的原因之一。