【问题标题】:Add task dependency to existing Gradle task将任务依赖添加到现有的 Gradle 任务
【发布时间】:2014-03-30 00:41:59
【问题描述】:

我要疯了。我有一个build.gradle 文件,看起来像:

apply plugin: 'idea'
task blah{
  // do something
}
idea{
  // some stuff
  dependsOn blah
}

我得到了这个:

Could not find method dependsOn() for arguments [task ':blah'] on root project ...

我不知道正确的语法是什么。有什么帮助吗?

【问题讨论】:

    标签: java groovy intellij-idea gradle


    【解决方案1】:

    我认为你只是想在任务完成后添加行为,只需获取所有任务名称并添加挂钩,它就会起作用。
    像这样:

        tasks.whenTaskAdded {
            theTask ->
                if (theTask.name.contains('externalNativeBuild')) {
                    theTask.doLast{
                        println "[*] begin to copy file!"
                    }
                }
    //            println theTask.name
        }
    

    【讨论】:

      【解决方案2】:

      我有一个非常相似的错误:

      Could not find method runEC2Step1DownloadSource() for arguments [{dependsOn=task ':docker:buildCopyEC2BuildFiles'}, task ':docker:runEC2SetupVariables', build_cwq7epb31twoanyxdhq1zosc7$_run_closure16@2a0fe301] on project ':docker' of type org.gradle.api.Project.
      

      我的问题是我的任务runEC2Step1DownloadSource 是这样定义的:

      task runEC2Step0CreateMachine(dependsOn: buildCopyEC2BuildFiles, runEC2SetupVariables) {
        doLast {
          // A bunch of stuff
        }
      }
      

      解决方案是将一个 ARRAY 添加到 dependsOn 任务列表中:

      task runEC2Step0CreateMachine(dependsOn: [buildCopyEC2BuildFiles, runEC2SetupVariables]) {
        doLast {
          // A bunch of stuff
        }
      }
      

      注意dependsOn任务列表周围的额外[]括号。

      【讨论】:

        【解决方案3】:

        这应该有效:

        apply plugin: 'idea'
        task blah{
          // do something
        }
        tasks.idea.dependsOn(blah)
        

        【讨论】:

        • 原因是idea插件在项目上创建了org.gradle.plugins.ide.idea.model.IdeaModel。引用idea 就像project.idea 在任务之前查找模型。
        【解决方案4】:

        也许我的工作示例会很有用 - build.gradle 的片段: (gradle 版本的 1.6)

        ear {
        
            doFirst {
                tasks.buildWar.execute();
            }
        
            ...
        
        }
        
        task deployProj <<{
            tasks.ear.execute()
            tasks.copyEar.execute()
            tasks.copyJar.execute()
        }
        
        task buildWar(type: GradleBuild) {
            buildFile = 'mysubproject/build.gradle'
            tasks = ['war']
        }
        
        task copyEar(type: Copy) {
            from earPath
            into "$System.env.JBOSS_HOME" + deploymentPath
        }
        
        task copyJar(type: Copy) {
            from jarPath
            into libPath
        }
        
        copyEar.mustRunAfter 'ear'
        copyJar.mustRunAfter 'ear'
        

        【讨论】:

          猜你喜欢
          • 2015-07-08
          • 1970-01-01
          • 2015-10-12
          • 2018-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-22
          • 2020-11-01
          相关资源
          最近更新 更多