【问题标题】:Dependencies of subproject can not be resolved for dependent project (but are resolved when building subproject itself)子项目的依赖无法为依赖项目解决(但在构建子项目时解决)
【发布时间】:2014-01-08 10:12:04
【问题描述】:

按照"Building and Testing with Gradle" 中的说明,我有一个这样的多项目 gradle 设置:

rootFolder
    build.gradle
    settings.gradle
    EMS
        build.gradle
    cloud-sdk
        build.gradle

cloud-sdk 项目依赖于几个 jar,部分通过 maven 解析,部分通过 locale jar:

// file: cloud-sdk/build.gradle
apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile group:'org.apache.tomcat', name:'tomcat-catalina', version:'7.0.47'
    compile group:'org.mongodb', name:'mongo-java-driver', version:'2.11.3'
    compile group:'com.google.code.gson', name:'gson', version:'2.2.4'
    compile group:'com.thoughtworks.xstream', name:'xstream', version:'1.4.6'
    compile fileTree(dir:'lib/', include:'JavaPNS_2.2.jar')
    compile fileTree(dir:'lib/', include:'gcm-server.jar')
}

EMS-project 依赖于我认为应该这样定义的 cloud-sdk:

// file: EMS/build.gradle
apply plugin: 'java'

dependencies {
    compile project(':cloud-sdk')
}

此外,我的根 build.gradle 和 settings.gradle 文件如下所示:

settings.gradle

include 'cloud-sdk', 'EMS'

build.gradle

apply plugin: 'java'

dependencies {
    compile project(':EMS')
}

在这种情况下,我不确定我是否还需要依赖 compile project (':cloud-sdk')。我尝试了这两个版本,但由于我在两种情况下都收到相同的错误消息,所以我认为这并不重要。

当我尝试通过 gradle build 从 rootFolder 运行脚本时,我收到以下错误消息:

Could not resolve all dependencies for configuration ':EMS:compile'.
> Could not find org.apache.tomcat:tomcat-catalina:7.0.47.
  Required by:
    rootFolder:EMS:unspecified > rootFolder:cloud-sdk:unspecified
> Could not find org.mongodb:mongo-java-driver:2.11.3.
  Required by:
    rootFolder:EMS > rootFolder:cloud-sdk:unspecified
> Could not find com.google.code.gson:gson:2.2.4.
  Required by:
    rootFolder:EMS > rootFolder:cloud-sdk:unspecified
> Could not find com.thoughtworks.xstream:xstream:1.4.6.
  Required by:
    rootFolder:EMS:unspecified > rootFolder:cloud-sdk:unspecified

但是当我只是通过gradle cloud-sdk:build 构建 cloud-sdk 项目时,gradle 会下载所需的 jar 并毫无问题地构建项目。

但即使我在那之后尝试gradle build,虽然 gradle 注意到 cloud-sdk 项目已经是最新的,但它抱怨缺少依赖项。

这是为什么呢?它已经下载了它们,所以它们应该在某个地方可用,即使cloud-sdk 知道它需要什么以及如何获取它。我错过了什么?我是否需要以其他方式指定依赖项?

【问题讨论】:

    标签: java gradle


    【解决方案1】:

    好的,因为我没有指定任何存储库来获取它们,所以 gradle 无法获取 EMS 项目中的依赖项。我认为这不是必需的,因为我需要它获取的唯一依赖项是在 cloud-sdk 项目中声明的,并且 确实有一个给定的存储库。

    这基本上是我的问题的解决方案,但是如果有人可以向我解释为什么有必要再次指定存储库或解释为什么它是 gradle 中应该修复的错误,我'会接受这个答案,因为它会回答“为什么”而不仅仅是“我如何让它工作”。

    【讨论】:

    • 您在 EMS 项目的存储库部分插入了什么?
    • 我刚刚从cloud-sdk项目中复制了它:repositories { mavenCentral() }
    • 我也忘记了我的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2013-08-05
    • 2016-08-11
    • 2021-06-20
    • 2021-08-24
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多