子项目的依赖关系无法解决依赖项目(但在构建子项目时自行解决)

时间:2014-01-08 10:12:04

标签: java gradle

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

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

cloud-sdk项目取决于几个罐子,部分通过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 - 项目取决于我认为应该像这样定义的cloud-sdk:

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

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

此外,我的root 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 gradle构建cloud-sdk项目时,下载所需的jar并构建项目没有问题。

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

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

1 个答案:

答案 0 :(得分:1)

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

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