【问题标题】:subprojects dependencies failure with GradleGradle 的子项目依赖项失败
【发布时间】:2018-10-15 07:16:59
【问题描述】:

我正在努力使用 Gradle 和以下项目结构的构建配置(非常简单...):

/projA
   /projB
   /projC

projC 使用 projB 中的类。

在 projA/settings.gradle:

include 'projB'
include 'projC'

在 projC/build.gradle:

dependencies{
 compile project(':projB')
}

在 IntelliJ 中我没有依赖解析的问题,但是当我在 projA 中运行 ./gradlew 构建时,我遇到了编译错误:

ClassC: Unresolved reference: ClassB

(其中 ClassC 是 projC 的类,它在使用来自 projB 的类 ClassB 时失败,显然......)

请注意,代码是 Kotlin 语言,我在 IntelliJ 中运行应用程序(春季启动运行)没有任何问题,但任何使用 Gradle 的构建都会给我一个错误(在 Intellij 和命令行中)。

我错过了什么?

问候, 阿德里安

【问题讨论】:

    标签: gradle dependency-management multi-module multi-project


    【解决方案1】:

    为您的rootProject 添加一个额外的顶级目录是一个常见的 Gradle 习惯用法。这是一个特殊项目,它是您构建中所有其他项目的父项目,在 multi-project build 中。

    这就是您的 settings.gradle 文件所在的位置:

    include ':projA:projB'
    include ':projA:projC'
    

    然后,我建议将 projA 作为 rootProject 的子目录,这样您的层次结构将如下所示:

    /myProject
      settings.gradle
      /projA
        build.gradle
        /projB
          build.gradle
        /projC
          build.gradle
    

    另外,在projC/build.gradle 中,您需要:

    dependencies {
      compile project(':projA:projB')
    }
    

    应该可以的。

    【讨论】:

    • 感谢 Felipe,我的第一个项目层次结构(projA 作为 projB 和 projC 的父级),compile project(":projB") 在我的 projC 上的 build.gradle 中不会完成这项工作吗?为什么我需要添加额外的顶级项目,因为 projA 已经是作为父项目的顶级项目?
    • AFAIK Gradle 将希望您提供项目依赖项的“完整路径”,这就是您需要 ":projA:projB" 的原因,将其视为目录的相对路径。
    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2013-01-30
    相关资源
    最近更新 更多