Gradle插件可以修改多模块项目中的子项目列表吗?

大卫·摩尔

我将下面的内容build.gradlesettings.gradle下面的内容结合在一起,以从几个单模块项目(例如,一个应用程序及其所有依赖项,或一个共享库以及使用该库的所有内容)中创建一个临时的多模块项目。

settings.gradle

// find all subprojects and include them
rootDir.eachFileRecurse { 
  if (it.name == "build.gradle") { 
    def projDir = it.parentFile
    if (projDir != rootDir) { 
      include projDir.name
      project(":${projDir.name}").projectDir = projDir
    }
  }
}

build.gradle:

// Make sure we've parsed subproject dependencies
evaluationDependsOnChildren()

// Map of all projects by artifact group and name
def declarationToProject = subprojects.collectEntries { p -> [toDeclaration(p), p] }

// Replace artifact dependencies with subproject dependencies, if possible
subprojects.each { p ->
  def changes = [] // defer so we don't get ConcurrentModificationExceptions
  p.configurations.each { c ->
    c.dependencies.each { d ->
      def sub = declarationToProject[[group:d.group, name:d.name]]
      if (sub != null) {
        changes.add({
            c.dependencies.remove(d)
            p.dependencies.add(c.name, sub)
        })
      }
    }
  }
  for (change in changes) {
    change()
  }
}

这行得通,但很难共享-如果其他人想做类似的事情,他们必须复制我的*.gradle文件或剪切和粘贴。

我想做的就是利用此功能并将其封装在插件中。build.gradle部分看起来很容易在pluginapply()方法中完成,但是在插件获得机会之前,子项目列表似乎已经定下来了。有什么方法可以进入构建过程的更早阶段,例如,通过应用除之外的其他东西Project还是应该辞职给插件执行覆盖任务settings.gradle


解决方案:根据Peter Niederweiser的回答,我将上面的代码移动到了两个插件中,一个从中调用,settings.gradle另一个从中调用build.gradlesettings.gradle:

buildscript {
    repositories { /* etc... */ }
    dependencies { classpath 'my-group:my-plugin-project:1.0-SNAPSHOT' }
}

apply plugin: 'find-subprojects'

而在 build.gradle:

buildscript {
    repositories { /* etc... */ }
    dependencies { classpath 'my-group:my-plugin-project:1.0-SNAPSHOT' }
}

evaluationDependsOnChildren()
apply plugin: 'local-dependencies'

请注意,从调用插件settings.gradle在Gradle 1.11或1.12中无效,但在Gradle 2.0中有效。

彼得·尼德维瑟

您需要在中应用插件settings.gradle,我认为最新版本支持该插件

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

gradle 可以处理无限的子项目深度吗?

来自分类Dev

Gradle在主项目中排除特定子项目的插件

来自分类Dev

如何在Gradle子项目中使用Gradle Artifactory插件

来自分类Dev

如何在Gradle子项目中使用Gradle Artifactory插件

来自分类Dev

如何在Maven中创建多模块项目?这样子项目的所有代码库都可以放在父项目中

来自分类Dev

在Gradle中的模块/子项目中使用AIDL接口

来自分类Dev

在离子项目中修改AndroidManifest.xml

来自分类Dev

多模块Spring Boot项目中的Gradle依赖插件

来自分类Dev

在电子项目中找不到模块

来自分类Dev

在春季从gradle子项目中导入JPA模型

来自分类Dev

Gradle:以编程方式执行子项目中的任务

来自分类Dev

使用Gradle-Artifactory插件发布子项目

来自分类Dev

Gradle Kotlin DSL:子项目和插件的问题

来自分类Dev

在 Gradle Release 插件的 buildTasks 中使用子项目任务

来自分类Dev

在多项目设置中,Gradle会评估每个子项目。我可以忽略一些子项目吗?

来自分类Dev

列表视图中的多色子项目-有可能吗?

来自分类Dev

我可以使用Gradle获取所有子项目的依赖关系树吗?

来自分类Dev

Gradle-构建子项目子项目

来自分类Dev

Gradle发行插件:将子项目中的文件添加到单独的文件夹中

来自分类Dev

gradle子项目中的根项目中定义的依赖项会如何处理?

来自分类Dev

我可以使用同一多模块项目中构建的版本覆盖Gradle模块的依赖关系吗?

来自分类Dev

子项目中的可可足类

来自分类Dev

记住子项目中对象的状态

来自分类Dev

多模块项目中的Gradle测试库

来自分类Dev

子项目的插件符号

来自分类Dev

Gradle多项目buildSrc在子项目中不起作用

来自分类Dev

为什么sbt控制台看不到多模块项目中子项目的软件包?

来自分类Dev

为什么sbt控制台看不到多模块项目中子项目的软件包?

来自分类Dev

Flutter插件Gradle子项目未由外部应用程序项目解析

Related 相关文章

  1. 1

    gradle 可以处理无限的子项目深度吗?

  2. 2

    Gradle在主项目中排除特定子项目的插件

  3. 3

    如何在Gradle子项目中使用Gradle Artifactory插件

  4. 4

    如何在Gradle子项目中使用Gradle Artifactory插件

  5. 5

    如何在Maven中创建多模块项目?这样子项目的所有代码库都可以放在父项目中

  6. 6

    在Gradle中的模块/子项目中使用AIDL接口

  7. 7

    在离子项目中修改AndroidManifest.xml

  8. 8

    多模块Spring Boot项目中的Gradle依赖插件

  9. 9

    在电子项目中找不到模块

  10. 10

    在春季从gradle子项目中导入JPA模型

  11. 11

    Gradle:以编程方式执行子项目中的任务

  12. 12

    使用Gradle-Artifactory插件发布子项目

  13. 13

    Gradle Kotlin DSL:子项目和插件的问题

  14. 14

    在 Gradle Release 插件的 buildTasks 中使用子项目任务

  15. 15

    在多项目设置中,Gradle会评估每个子项目。我可以忽略一些子项目吗?

  16. 16

    列表视图中的多色子项目-有可能吗?

  17. 17

    我可以使用Gradle获取所有子项目的依赖关系树吗?

  18. 18

    Gradle-构建子项目子项目

  19. 19

    Gradle发行插件:将子项目中的文件添加到单独的文件夹中

  20. 20

    gradle子项目中的根项目中定义的依赖项会如何处理?

  21. 21

    我可以使用同一多模块项目中构建的版本覆盖Gradle模块的依赖关系吗?

  22. 22

    子项目中的可可足类

  23. 23

    记住子项目中对象的状态

  24. 24

    多模块项目中的Gradle测试库

  25. 25

    子项目的插件符号

  26. 26

    Gradle多项目buildSrc在子项目中不起作用

  27. 27

    为什么sbt控制台看不到多模块项目中子项目的软件包?

  28. 28

    为什么sbt控制台看不到多模块项目中子项目的软件包?

  29. 29

    Flutter插件Gradle子项目未由外部应用程序项目解析

热门标签

归档