如何在Gradle插件中设置任务属性

如何在Gradle插件中设置任务属性,gradle,sonarqube,sonar-runner,gradle-custom-plugin,Gradle,Sonarqube,Sonar Runner,Gradle Custom Plugin,我正在创建一个gradle插件来应用sonar runner插件和许多默认值,例如sonar主机URL和sonar JDBC URL。但是我不知道如何设置属性 在build.gradle中设置时,我使用: apply plugin: 'sonar-runner' sonarRunner { sonarProperties { property 'sonar.host.url', 'http://mySonar.company.com' property

我正在创建一个gradle插件来应用sonar runner插件和许多默认值,例如sonar主机URL和sonar JDBC URL。但是我不知道如何设置属性

在build.gradle中设置时,我使用:

apply plugin: 'sonar-runner'

sonarRunner {
    sonarProperties {
        property 'sonar.host.url', 'http://mySonar.company.com'
        property 'sonar.jdbc.url', 'jdbc:mysql://127.0.0.1:1234/sonar'
    }
}
我的gradle插件看起来像:

class MySonarPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        project.apply plugin: 'sonar-runner'
        project.configurations {
            sonarRunner {
                sonarProperties {
                    property 'sonar.host.url', 'http://mySonar.company.com'
                    property 'sonar.jdbc.url', 'jdbc:mysql://127.0.0.1:1234/sonar'
                }
            }
        }
    }
}
类MySonarPlugin实现插件{
@凌驾
无效申请(项目){
project.apply插件:“sonar runner”
project.configurations{
声纳跑步者{
声纳特性{
属性'sonar.host.url','http://mySonar.company.com'
属性'sonar.jdbc.url','jdbc:mysql://127.0.0.1:1234/sonar'
}
}
}
}
}

通过这个设置,我得到一个
无签名的方法
异常。我应该如何设置这些属性?

我发现我可以使用
project.getExtensions().sonarRunner.sonarProperties{…}
来设置声纳属性。见下面的例子

class MySonarPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        project.apply plugin:'sonar-runner'
        project.getExtensions().sonarRunner.sonarProperties {
            property 'sonar.host.url', 'http://mySonar.company.com'
            property 'sonar.jdbc.url', 'jdbc:mysql://127.0.0.1:1234/sonar'
        }
    }
}
类MySonarPlugin实现插件{
@凌驾
无效申请(项目){
project.apply插件:“sonar-runner”
project.getExtensions().sonarRunner.sonarProperties{
属性'sonar.host.url','http://mySonar.company.com'
属性'sonar.jdbc.url','jdbc:mysql://127.0.0.1:1234/sonar'
}
}
}

谢谢@mikerylander和@ravikanth!我也尝试过setProperty和.properties解决方案,但它们对我不起作用

真正棘手的是,autocomplete没有为我找到
project.getExtensions().sonarqube.properties
中的“sonarqube”部分,所以没有你的帖子,我就没有找到这个解决方案

我为一个多模块Android项目编写了一个定制的Gradle插件来运行sonarqube,你的帖子帮助了我。下面是我的完全自定义插件。由于插件被设计为包含在我的Android项目的任何子模块的build.gradle中,所以我在“my_product”${project.path}前面加了前缀,但当然,您可以在这里使用任何值

以下是我的完整插件代码,以防有帮助:

package com.example.gradle.plugins

import org.gradle.api.Plugin
import org.gradle.api.Project

class MySonarCodeCoveragePlugin implements Plugin<Project> {
    private Project project

    void apply(Project project) {
        this.project = project

        project.apply plugin: 'org.sonarqube'

        project.getExtensions().sonarqube.properties
                {
                    property "sonar.sources", "${project.projectDir}/src/main"
                    property "sonar.organization", "my_org"
                    property "sonar.projectKey", "my_product${project.path}"
                    property "sonar.projectName", "my_product${project.path}"
                    property "sonar.coverage.jacoco.xmlReportPaths", "${project.buildDir}/reports/jacoco/jacocoTestReport/jacocoTestReport.xml"
                    property "sonar.scanner.metadataFilePath", "${project.buildDir}/sonar/report-task.txt"
                }
    }
}
package com.example.gradle.plugins
导入org.gradle.api.Plugin
导入org.gradle.api.Project
类mySonarCodeCoverage实现插件{
私人项目
无效申请(项目){
this.project=project
project.apply插件:“org.sonarqube”
project.getExtensions().sonarqube.properties
{
属性“sonar.sources”,“${project.projectDir}/src/main”
属性“sonar.organization”、“my_org”
属性“sonar.projectKey”,“我的产品${project.path}”
属性“sonar.projectName”,“我的产品${project.path}”
属性“${project.buildDir}/reports/jacoco/jacoctestreport/jacoctestreport.xml”
属性“sonar.scanner.metadataFilePath”,“${project.buildDir}/sonar/report task.txt”
}
}
}

工作起来很有魅力!!!在遇到这种情况之前,我尝试了以下不起作用的方法//project.tasks['sonarqube'].setProperty('sonar.projectName','testplugindev')//project.tasks['sonarqube'].properties.putAt('sonar.projectName','testplugindev')//project.task('sonarqube').properties.putIfAbsent(“sonar.projectName”,“testplugindev”)`刚刚实现;因为我使用的是sonarqube扫描仪,而不是runner;我使用了
project.getExtensions().sonarqube.properties{property'sonar.projectName',testplugindev'}
SonarQubePlugin.java中的以下源方法addGradleDefaults正在设置默认值。