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

Jan*_*rff 0 java dependencies intellij-idea gradle

我有一个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')
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

摇篮多项目文档也没有提到,我可能会丢失,可能会导致错误的任何特殊要求.

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

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

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

注意:这不是Android项目.

Jan*_*rff 6

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

评论3给了我另一个想法.该项目可包括settings.gradle如下:

includeBuild '../project2'
Run Code Online (Sandbox Code Playgroud)

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

dependencies {
    compile 'group:project2:version'
}
Run Code Online (Sandbox Code Playgroud)

我通常更喜欢这个,因为它代码更少,看起来更干净.然而,缺点是递归复合构建是不可能的.因此,如果project2它本身也是一个复合构建,这将无法工作.