使声纳跑步者Gradle任务取决于我的任务之一

Gar*_*eth 2 osgi runner gradle bnd sonarqube

我正在尝试最近在gradle 1.5中发布的新Sonar Runner任务.我想做的是能够使声纳转轮任务依赖于另一个任务,这样我就可以为这个项目正确设置声纳属性(即sonar.sources,sonar.binaries,sonar.libraries,sonar.java.source ,sonar.java.target).

具体来说,我正在使用一个名为bnd的osgi构建工具,它将在执行ant init任务时提供这些值(请注意,虽然我包含了默认的bnd build.xml文件,但我的完整构建实际上是使用gradle完成的).

我认为通过这样做可以自定义声纳运行器任务(这是一个多模块构建):

subprojects {
    sonarRunner.dependsOn init
}
Run Code Online (Sandbox Code Playgroud)

最终添加这样的东西(从我对bnd ant变量的理解):

subprojects {
    sonarRunner {
        sonarProperties {
            property "sonar.java.source", ant.property["project.sourcepath"]
            property "sonar.java.target", ant.property["project.output"]
            property "sonar.sources", ant.property["project.allsourcepath"]
            property "sonar.libraries", ant.property["project.buildpath"]
        }
    }

    sonarRunner.dependsOn init
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试添加dependsOn时,我收到错误:

* What went wrong:
A problem occurred evaluating root project 'myproject'.
> Could not find property 'init' on project ':com.company.myproject.mymodule'.
Run Code Online (Sandbox Code Playgroud)

如果我尝试让sonarRunner依赖于gradle任务,我会收到以下错误:

* What went wrong:
A problem occurred evaluating root project 'myproject'.
> Could not find method dependsOn() for arguments [task ':gradletask'] on org.gradle.api.sonar.runner.SonarRunnerExtension_Decorated@c4d7c0c.
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗?如果有人能指出我正确的方向,那将是一个很大的帮助.

erd*_*rdi 10

您与不能够调用问题dependsOn()sonarRunner的任务来自该插件定义了两个事实,sonarRunner扩展和sonarRunner任务.看起来扩展优先于在Gradle构建文件中按名称解析对象时的任务,因此您的堆栈跟踪指出您正在尝试调用dependsOn()实例,org.gradle.api.sonar.runner.SonarRunnerExtension_Decorated而不是在SonarRunner任务实例上调用它.

我认为,如果您明确地从任务容器中检索任务,那么您应该没问题:

tasks.sonarRunner.dependsOn init
Run Code Online (Sandbox Code Playgroud)


Joa*_*son 5

在子项目gradle文件之前评估根项目gradle文件,这意味着在尝试解决它的位置上不存在init.

如果你想在根项目申报依赖一种解决方法是在描述使用afterEvaluate http://www.gradle.org/docs/current/userguide/build_lifecycle.html,请尝试:

subprojects {
    afterEvaluate{
        sonarRunner.dependsOn init
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是直接在子项目中添加依赖项,或者通过应用另一个根gradle文件.

apply from: '../sonardependency.gradle'
Run Code Online (Sandbox Code Playgroud)