如何在Gradle插件中设置任务属性
我正在创建一个gradle插件来应用sonar runner插件和许多默认值,例如sonar主机URL和sonar JDBC URL。但是我不知道如何设置属性 在build.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
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正在设置默认值。