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

标签 java intellij-idea gradle dependencies

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

  • 项目1
    • 构建.gradle
    • 设置.gradle
    • src/
  • 项目2
    • 构建.gradle
    • 设置.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')
}

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

Error:(21, 0) Could not find method include() for arguments [:project2] on root project 'project1' of type org.gradle.api.Project.

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

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

当我保留 include 调用时,我收到一条消息:在根项目中找不到项目路径。

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

我想知道我做错了什么以及为什么显然没有多少其他人遇到同样的问题。如果有提示,我将不胜感激。

注意:这不是 Android 项目。

最佳答案

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

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

includeBuild '../project2'

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

dependencies {
    compile 'group:project2:version'
}

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

关于java - 尝试将 Gradle 项目包含为依赖项,但 include() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821336/

相关文章:

java - 检查文件内容中缺少哪个参数

Java JSON 解析

groovy - 为什么 Gradle 中的配置和依赖不是 ExtensionAware?

java - Jersey Hello World 什么也不显示

android - KMM : How to resolve Incompatible abi version. 当前默认为 '1.4.2' ,找到 '1.5.0' 。 1.5.20编译器产生的库?

spring - 用 gradle 构建 spring

java - 我的代码抛出 ArrayIndexOutOfBoundsException

java - java api中接口(interface)命名的标准是什么

java - 在 JDeveloper 11g 中找不到 mySQL 驱动程序类

java - 将字符串变量传递给 Java 方法不起作用,但硬编码字符串起作用?