2

我正在创建一个 gradle 插件来应用 sonar-runner 插件并默认许多值,例如声纳主机 URL 和声纳 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例外。我应该如何设置这些属性?

4

2 回答 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'
        }
    }
}
于 2015-06-01T23:35:16.897 回答
0

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

真正棘手的事情是自动完成没有project.getExtensions().sonarqube.properties为我找到“sonarqube”部分,所以没有你的帖子我从来没有得到这个解决方案。

我编写了一个自定义 Gradle 插件来为一个多模块 Android 项目运行 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"
                }
    }
}
于 2020-05-07T19:41:39.400 回答