【问题标题】:Gradle multiproject, multiple root projects and dependenciesGradle 多项目、多个根项目和依赖项
【发布时间】:2018-02-21 20:47:39
【问题描述】:

是否可以从我的主根项目中引用(包含)另一个 gradle 根项目及其子项目?

示例:我目前有 2 个这样的 gradle android 多项目:

    rootA
        |--- android_lib_A1
        |--- android_lib_A2
        |--- androidapp_A

    rootB
        |--- android_lib_B1
        |--- android_lib_B2
        |--- androidapp_B

如何正确地将 gradle 项目 android_lib_B1 包含到 rootA 中以在 androidapp_A 中使用它?

我目前面临的问题如下:

  • rootB gradle 构建在包含到 rootA 时不会被读取,更多 特别是allprojects{}subprojects{} 指令
  • rootB gradle 设置未读取,导致构建失败 android_lib_B1 依赖于 android_lib_B2 例如,但根据我所阅读的内容,这似乎是正常行为。

我可以通过将android_lib_B1 发布到我的本地 maven 存储库来使其工作,但我希望能够将它们全部编译在一起,而无需额外的发布任务。

我看到gradle的ProjectDescriptorparentchildren属性,这是要走的路吗?

【问题讨论】:

    标签: android gradle android-gradle-plugin build.gradle


    【解决方案1】:

    您可以使用链接项目中的外部模块

    1) 在你的项目中rootA/settings.gradle

    include ':android_lib_A1',':android_lib_A2',':androidapp_A' ':android_lib_B1'
    project(':android_lib_B1').projectDir = new File("/path-to-project/rootB/android_lib_B1")
    

    2) 在build.gradleandroidapp_A 模块中添加依赖

    dependencies {
        compile project(':android_lib_B1')
    }
    

    注意。
    这样,您将能够读取android_lib_B1 中的build.gradle,但不能读取rootB 中的脚本。这意味着如果您在 rootB 中定义了一些任务或功能,则必须在 rootA 或 android_lib_B1/build.gradle 文件中添加。
    当然,rootB/settings.gradle 不会被读取,因为您使用的是 rootA 项目。

    部分解决方案可能是使用 common 文件夹,您可以在其中放置 gradle 文件。 您可以使用以下方法链接这些文件:

    apply from: 'gradleFolderScript/myFile.gradle'
    

    【讨论】:

    • 感谢您的回答。我已经尝试过了,正如你所说,我的 rootB 任务没有被读取。我来自 Maven,并使用 rootB 来分解我的库中的常见任务,例如父 pom.xml。除了将 conf 推送到每个库之外,真的没有其他方法了吗?还是将rootB 复制/粘贴到rootA
    • @IppX 我不知道。通常我使用一个单独的 gradle 文件(不是顶级文件)将它与apply from: 'gradleFolderScript/myFile.gradle' 链接起来。通过这种方式,您可以使用一个公共文件夹来重用相同的 gradle 文件。
    • 从这个解析出来的简短答案:不,你不能。但是您可以在rootA 中重新声明rootB 配置,或者从外部文件将其应用于rootArootB
    【解决方案2】:

    另一种选择是将项目分开并将工件发布到公共存储库(例如artifactory)。见publishing artifacts

    【讨论】:

    • 感谢您的回答!这确实有效,但正如我所说,如果可能的话,我想避免这个额外的发布任务。
    • 啊,那么@GabrieleMariotti 建议的多模块构建加上project(...) 依赖项就是解决方案
    猜你喜欢
    • 2018-11-10
    • 2015-08-22
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多