【问题标题】:Short way to run gradle task on subproject在子项目上运行 gradle 任务的快捷方式
【发布时间】:2019-10-02 12:46:13
【问题描述】:

所以,使用 gradle 5.6.1,我有一个包含多个嵌套模块/项目的项目:

root
├── A
└── B
    └── C
        └── D

现在,如果我使用 maven,我可以这样做

mvn clean install -pl :D

但在 gradle 中似乎我需要输入:

./gradle :B:C:D:assemble

这意味着我需要知道并输入模块/子项目的完整路径。

有没有更短的方法,只能通过:D

ps:如果相关的话,我也在使用 gw (https://github.com/srs/gw)

【问题讨论】:

    标签: gradle gradlew


    【解决方案1】:

    您可以通过task rule 实现此目的。例如:

    tasks.addRule("Pattern: -Pproject=<PROJECT> <TASK>") { String taskName ->
       def projectProp = findProperty('project')
       if (projectProp) {
          def matchingTasks = getTasksByName(taskName, true).findAll { it.project.name == projectProp }
          if (matchingTasks) { 
             task(taskName) {
                dependsOn matchingTasks
             }
          }
       }
    }
    

    然后在命令行上

    gradle -Pproject=D assemble
    

    【讨论】:

    • 感谢您的建议。我可能无法在代码库中介绍它,但会尝试 :)
    • 如果您只是自己想要它,对于所有版本,您可以通过init script 来实现。例如USER_HOME/.gradle/init.gradle
    • 如何从初始化脚本 @lance-java 访问任务对象?运行初始化脚本时出现错误:> 无法获取 org.gradle.invocation.DefaultGradle 类型的构建的未知属性“任务”。
    • build.gradle(针对Project 实例执行)不同,初始化脚本针对Gradle 实例执行。所以你可以做类似rootProject { tasks.addRule(...) }
    【解决方案2】:

    目前似乎没有合适的方法来实现这一点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2020-01-03
      • 2019-08-09
      相关资源
      最近更新 更多