【问题标题】:Gradle Local Project DependencyGradle 本地项目依赖
【发布时间】:2016-04-07 14:22:45
【问题描述】:

我在同一个目录中有 2 个 Gradle 项目。目录结构如下:

ParentDirectory\
    GradleProjectA\
        build.gradle
    GradleProjectB\
        settings.gradle
        build.gradle

我想将GradleProjectA 添加为GradleProjectB 的依赖项。在settings.gradle for GradleProjectB 中,我尝试添加include 'GradleProjectA',然后在build.gradle:compile project(':GradleProjectA') 中添加,但这不起作用。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 为什么不起作用?你得到哪个错误?
  • 它只是无法将 GradleProjectA 识别为有效的依赖项。
  • 尝试将include 'GradleProjectA' 替换为include ':GradleProjectA'
  • 试过了,还是不行。

标签: java gradle


【解决方案1】:

我这样做的方式如下:

GradleProjectB/settings.gradle:

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

GradleProjectB/build.gradle:

compile project(":GradleProjectA")

【讨论】:

  • 顺便说一下,compile project(":GradleProjectA") 需要在 ProjectB 的 build.gradle 的 dependencies{....} 部分中
  • 对不起,它给了我错误:> Project with path ':ProjA' could not be found in project ':ProjB'. 有什么建议吗?谢谢!
【解决方案2】:

在最新版本的Gradle中,你可以使用Composite Builds,像这样:

在 GradleProjectB 的 settings.gradle 中,添加以下行:

includeBuild "../GradleProjectA"

它将自动处理依赖冲突和所有这些问题。

【讨论】:

  • 我想在一个项目上使用这个技巧,该项目正在使用另一个项目的特定修订版,该项目正在等待 PR 被合并,因此尚未部署(因此我的项目将必须等待一段时间)。我将 other 项目下载到本地并构建它。这个技巧在这种情况下有用吗?
【解决方案3】:

settings.gradle 文件需要位于指定两者的父目录中。

试试下面的格式:

ParentDirectory\ 
    build.gradle
    settings.gradle <-- include 'GradleProjectA', 'GradleProjectB'
    GradleProjectA/
        build.gradle
    GradleProjectB/
        build.gradle

编辑: 好的,如果您的父目录不是构建目录,那么您可以执行以下操作:

在您的 gradle 项目 b settings.gradle 文件中尝试以下操作:

includeFlat("GradleProjectA") // Include the project

在你的 b build.gradle 中:

compile project(":GradleProjectA")

includeFlat reference

【讨论】:

  • ParentDirectory 不是 Gradle 项目,它只是一个空的 IntelliJ 项目。
  • 更新答案以说明非 gradle 父目录。
【解决方案4】:

如果GradleProjectA 和GradleProjectB 是一个多项目Gradle 构建的一部分,那么您可能希望ParentDirectory 中的settings.gradle 包含A 和B。您使用settings.gradle 的方式不正确.也许您应该重新阅读用户指南中有关多项目 gradle 构建的部分。

如果这两个项目是单独的项目,但您仍想依赖 B 中的 A,您可能更愿意构建 A,将其发布到某个存储库(可能是 mavenLocal 存储库),然后依赖项目 B 中构建的工件。

【讨论】:

    【解决方案5】:

    以下应该可以解决问题:

    root
    +-- projectA
    |   +-- build.gradle
    |       => dependencies { compile project(':common') }
    |   +-- settings.gradle 
    |       => include ':common'
    |          project(':common').projectDir = new File('../common')
    +-- projectB
    |   => same as projectA
    +-- common
        +-- build.gradle
            => regular build, probably with a "jar" section
    

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 2018-02-20
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多