使用自定义任务编排Gradle构建调用

时间:2015-08-18 17:04:09

标签: groovy gradle

我正在尝试定义两个新的Gradle任务buildAllpubLocal,以按特定顺序运行其他任务。

调用gradle buildAll时,我希望Gradle执行与执行gradle clean build writePom相同的操作(请参阅下面的writePom)。

执行gradle pubLocal时,我希望Gradle执行与执行gradle buildAll install相同的操作。

到目前为止,这是我最好的尝试:

// build.gradle
task writePom << {
    pom {
        project {
            groupId 'mygroup'
            artifactId 'mylib'
            version version

            inceptionYear '2015'
            licenses {
                license {
                    name 'Blah'
                    url 'blah'
                    distribution 'blah'
                }
            }
        }
    }.writeTo("build/libs/pom.xml")
}

task buildAll(dependsOn: clean, build, writePom)

task pubLocal(dependsOn: buildAll, install)

当我对此运行gradle buildAll时,我得到:

myuser@mymachine:~/tmp/myapp$./gradlew buildAll
FAILURE: Build failed with an exception.

* Where:

Build file '/Users/myuser/tmp/myapp/build.gradle' line: 67

* What went wrong:

A problem occurred evaluating root project 'myapp'.

> Could not find method buildAll() for arguments [{dependsOn=task ':clean'}, task ':build', task ':writePom'] on root project 'myapp'.

关于我哪里出错的任何想法?

2 个答案:

答案 0 :(得分:1)

这可能是复制粘贴的遗留问题,但您的字符串不会使用标准的单引号或双引号一致地引用。例如:

    }.writeTo(“build/libs/pom.xml")

没有正确引用字符串,因为它使用字符而不是"打开。与上面的单引号相同。

您可以从突出显示代码的方式看出,红色的所有内容都被解释为字符串。如果您的实际代码中出现这种情况,则buildAllpubLocal任务将无法识别,因为它们是字符串而非代码的一部分。

<强>更新

由于上述答案现在无关紧要,这是另一种可能性。错误消息显示dependsOn参数中仅列出"clean"任务。 buildAll任务依赖项应该声明如下:

task buildAll(dependsOn: [clean, build, writePom])

pubLocal任务类似。

答案 1 :(得分:0)

我正在使用Gradle 2.4。以下文件包含Maven插件,使用[]中的列表dependsOn,并确保clean之前必须执行build

apply plugin: 'maven'

task writePom << {
    pom {
        project {
            groupId 'mygroup'
            artifactId 'mylib'
            version version

            inceptionYear '2015'
            licenses {
                license {
                    name 'Blah'
                    url 'blah'
                    distribution 'blah'
                }
            }
        }
    }.writeTo("build/libs/pom.xml")
    println "TRACER writePom"
}

task clean << { println "TRACER clean" }
task build << { println "TRACER build" }
build.mustRunAfter clean

task install << { println "TRACER install" }

task buildAll(dependsOn: [clean, build, writePom])

task pubLocal(dependsOn: [buildAll, install])

我得到这个输出(减去Gradle 3警告):

bash-3.2$ gradle buildAll 
:clean
TRACER clean
:build
TRACER build
:writePom
TRACER writePom
:buildAll

BUILD SUCCESSFUL

和此:

bash-3.2$ gradle pubLocal
:clean
TRACER clean
:build
TRACER build
:writePom
TRACER writePom
:buildAll
:install
TRACER install
:pubLocal

BUILD SUCCESSFUL
相关问题