尝试将Gradle项目包含为依赖项,但include()不起作用

时间:2017-05-06 14:01:29

标签: java intellij-idea gradle dependencies

我有一个Gradle项目,它取决于另一个Gradle项目。我的项目结构是这样的:

  • PROJECT1
    • 的build.gradle
    • settings.gradle
    • 的src /
  • 项目2
    • 的build.gradle
    • settings.gradle
    • 的src /
project1/build.gradle中的

我想将project2添加为依赖项:

version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

sourceSets {
    main {
        java {
            srcDirs = [ 'src' ]
        }
    }
}

include ':project2'
project(':project2').projectDir = new File("../project2")

dependencies {
    compile project(':project2')
}

不幸的是,我总是收到此错误消息:

  

错误:(21,0)无法在根项目' project1'上找到参数[:project2]的方法include()类型为org.gradle.api.Project。

我正在使用Gradle 3.5,并且我在命令行(gradle build)和IntelliJ中都收到此错误。我找到了一些关于同一问题的StackOverflow线程(thisthis),但它们没有帮助。

Gradle multi-project documentation也没有提及可能导致错误的任何具体要求。

当我离开include呼叫时,我收到的消息是在根项目中找不到项目路径。

我也尝试将依赖项移动到project1的子目录,但没有成功。

我想知道我做错了什么,为什么显然没有其他人有同样的问题。我很感激提示。

注意:这不是Android项目。

1 个答案:

答案 0 :(得分:5)

正如第一条评论所指出的那样,include实际上需要进入settings.gradle而不进入build.gradle。这同样适用于更改projectDir属性。

评论3给了我另一个想法。该项目可以包含在settings.gradle中,如下所示:

includeBuild '../project2'

并在project1/build.gradle中我将依赖项指定为

dependencies {
    compile 'group:project2:version'
}

我一般都喜欢这样,因为它的代码更少,看起来更干净。然而,缺点是递归复合构建是不可能的。因此,如果project2本身也是一个复合构建,那么这不会起作用。