Gradle本地项目依赖

21

我有两个Gradle项目,它们都在同一个目录下。目录结构如下:

ParentDirectory\
    GradleProjectA\
        build.gradle
    GradleProjectB\
        settings.gradle
        build.gradle
我想将GradleProjectA作为依赖项添加到GradleProjectB中。在 GradleProjectBsettings.gradle 中,我尝试添加 include 'GradleProjectA' ,然后在 build.gradle 中使用 compile project(':GradleProjectA'),但是没有起作用。
任何帮助都将不胜感激。谢谢。

为什么不起作用?你遇到了哪个错误? - Héctor
它只是不将GradleProjectA识别为有效的依赖项。 - Josh M
尝试将include 'GradleProjectA'替换为include ':GradleProjectA' - Héctor
尝试过了,也没有用。 - Josh M
6个回答

25

我处理类似问题的方式如下:

GradleProjectB/settings.gradle

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

GradleProjectB/build.gradle:

compile project(":GradleProjectA")

2
顺便提一下,compile project(":GradleProjectA") 需要放在 ProjectB 的 build.gradle 文件的 dependencies{....} 部分中。 - William
3
抱歉,它给了我一个错误:>在项目 ':ProjB' 中找不到路径为':ProjA'的项目。 有什么建议吗?谢谢! - ch271828n

18
在最新版本的Gradle中,您可以使用组合构建,如下所示:
GradleProjectB的settings.gradle中,添加以下行: includeBuild "../GradleProjectA" 它将自动处理依赖项冲突和其他相关事项。

1
我想在一个项目中使用这个技巧,该项目正在使用另一个项目的特定版本,该版本正在等待合并请求,因此尚未部署(因此我的项目将不得不等待一段时间)。我将 另一个 项目下载到本地并进行了构建。这种方法在这种情况下可行吗? - eftshift0

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

在你的 build.gradle 文件中:

compile project(":GradleProjectA")

includeFlat 的参考文档


ParentDirectory不是Gradle项目,它只是一个空的IntelliJ项目。 - Josh M
更新答案以考虑非 Gradle 父目录。 - bszeliga

1
以下内容应该能解决问题:
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

0
您可以在父目录中创建一个 settings.gradle 文件。这将仅将 GradleProjectAGradleProjectB 关联起来。这是 官方 Gradle 文档 中使用的方法。它看起来像下面这样:

ParentDirectory/settings.gradle

rootProject.name = 'RootProject'
include 'GradleProjectA', 'GradleProjectB'

然后在GradleProjectB/build.gradle中,您只需在依赖项下面写入implementation project(':GradleProjectA')即可。

-1
如果GradleProjectAGradleProjectB是一个多项目Gradle构建的一部分,那么您可能希望在ParentDirectory中包含A和B的settings.gradle。您使用settings.gradle的方式不正确。也许您应该重新阅读用户指南中关于多项目gradle构建的章节。
如果这两个项目是独立的项目,但您仍然希望从B依赖于A,则可能更喜欢构建A,将其发布到某个存储库(可能是mavenLocal存储库),然后从项目B依赖于构建的工件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接