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

问题描述 投票:2回答:2

我正在创建一个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'
                }
            }
        }
    }
}

这样设置后,我得到了一个 No signature of method 异常。我应该如何设置这些属性?

gradle sonarqube sonar-runner gradle-custom-plugin
2个回答
3
投票

我发现我可以使用 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'
        }
    }
}

0
投票

谢谢 @mikerylander 和 @ravikanth! 我也试过setProperty和.properties的解决方案,但它们对我来说并不奏效。

真正棘手的是,自动完成程序没有找到 "sonarqube "的部分。project.getExtensions().sonarqube.properties 对我来说,所以如果没有你的帖子,我从来没有得到这个解决方案。

我为一个多模块的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"
                }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.