如何在 Gradle 插件中设置任务属性
How do I set task properties in a Gradle Plugin
我正在创建一个 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
异常。我应该如何设置这些属性?
我发现我可以使用 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'
}
}
}
谢谢@mikerylander 和@ravikanth!我也尝试过 setProperty 和 .properties 解决方案,但它们对我不起作用。
真正棘手的事情是自动完成没有为我找到 project.getExtensions().sonarqube.properties
的 "sonarqube" 部分,所以如果没有你的 post,我从来没有找到这个解决方案。
我为多模块 Android 项目为 运行 sonarqube 编写了自定义 Gradle 插件,您的 post 帮助了我。下面是我的完整自定义插件。由于该插件旨在包含在我的 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"
}
}
}
我正在创建一个 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
异常。我应该如何设置这些属性?
我发现我可以使用 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'
}
}
}
谢谢@mikerylander 和@ravikanth!我也尝试过 setProperty 和 .properties 解决方案,但它们对我不起作用。
真正棘手的事情是自动完成没有为我找到 project.getExtensions().sonarqube.properties
的 "sonarqube" 部分,所以如果没有你的 post,我从来没有找到这个解决方案。
我为多模块 Android 项目为 运行 sonarqube 编写了自定义 Gradle 插件,您的 post 帮助了我。下面是我的完整自定义插件。由于该插件旨在包含在我的 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"
}
}
}