Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle 对于不同的任务,不能有不同的系统属性值_Gradle_Sonarqube_Build.gradle_Sonarqube Scan - Fatal编程技术网

Gradle 对于不同的任务,不能有不同的系统属性值

Gradle 对于不同的任务,不能有不同的系统属性值,gradle,sonarqube,build.gradle,sonarqube-scan,Gradle,Sonarqube,Build.gradle,Sonarqube Scan,我试图创建两个任务来执行sonarcube任务。我希望能够根据任务指定不同的属性 task sonarqubePullRequest(type: Test){ System.setProperty( "sonar.projectName", "sonarqubePullRequest") System.setProperty("sonar.projectKey", "sonarqubePullRequest") System.setProp

我试图创建两个任务来执行sonarcube任务。我希望能够根据任务指定不同的属性

   task sonarqubePullRequest(type: Test){

        System.setProperty( "sonar.projectName", "sonarqubePullRequest")
        System.setProperty("sonar.projectKey", "sonarqubePullRequest")
        System.setProperty("sonar.projectVersion", serviceVersion)
        System.setProperty("sonar.jacoco.reportPath", 
        "${project.buildDir}/jacoco/test.exec")

        tasks.sonarqube.execute()
    }


task sonarqubeFullScan(type: Test){
    System.setProperty("sonar.projectName", "sonarqubeFullScan")
    System.setProperty("sonar.projectKey", "sonarqubeFullScan")
    System.setProperty("sonar.projectVersion", serviceVersion)
    System.setProperty("sonar.jacoco.reportPath", 
    "${project.buildDir}/jacoco/test.exec")
    tasks.sonarqube.execute()
}
任务可以工作,但我正在设置的属性似乎有问题

如果我运行第一个任务,即sonarqubePullRequest,则一切正常,但如果运行sonarqubeFullScan,则if使用sonarqubePullRequest中指定的值。因此,项目名称设置为QUBEPULLREQUEST

就好像这些属性是在运行时设置的,无法更新。我觉得我错过了一些明显的东西,没有收到任何建议。

首先:。该方法不是public Gradle API的一部分,因此,其行为可能会更改或未定义。Gradle将自行执行任务,因为您指定了它们(命令行或
settings.Gradle
)或作为任务依赖项

代码不起作用的原因是。在配置阶段,将执行任务闭包中的所有(配置)代码,但不会执行任务。因此,您将始终覆盖系统属性。在执行阶段仅执行(内部)任务操作、
doFirst
doLast
闭包。请注意,每个任务在一个构建中只执行一次,因此您将任务参数化两次的方法永远不会起作用

另外,我不明白您为什么要使用系统属性来配置
sonarqube
任务。您可以通过以下方式直接配置任务:

sonarqube {
    properties {
        property 'sonar.projectName', 'sonarqubePullRequest'
        // ...
    }
}
现在,您可以配置
sonarqube
任务。要区分这两种情况,可以为不同的特性值添加条件。下一个示例使用项目属性作为条件:

sonarqube {
    properties {
        // Same value for both cases
        property 'sonar.projectVersion', serviceVersion
        // Value based on condition
        if (project.findProperty('fullScan') {
            property 'sonar.projectName', 'sonarqubeFullScan'
        } else {
            property 'sonar.projectName', 'sonarqubePullRequest'
        }
    }
}
或者,您可以添加该类型的另一个任务。通过这种方式,您可以对这两个任务进行不同的参数化,并在需要时调用它们(通过命令行或依赖项):

sonarqube {
    // Generated by the plugin, parametrize like described above
}

task sonarqubeFull(type: org.sonarqube.gradle.SonarQubeTask) {
    // Generated by your build script, parametrize in the same way
}
首先:。该方法不是public Gradle API的一部分,因此,其行为可能会更改或未定义。Gradle将自行执行任务,因为您指定了它们(命令行或
settings.Gradle
)或作为任务依赖项

代码不起作用的原因是。在配置阶段,将执行任务闭包中的所有(配置)代码,但不会执行任务。因此,您将始终覆盖系统属性。在执行阶段仅执行(内部)任务操作、
doFirst
doLast
闭包。请注意,每个任务在一个构建中只执行一次,因此您将任务参数化两次的方法永远不会起作用

另外,我不明白您为什么要使用系统属性来配置
sonarqube
任务。您可以通过以下方式直接配置任务:

sonarqube {
    properties {
        property 'sonar.projectName', 'sonarqubePullRequest'
        // ...
    }
}
现在,您可以配置
sonarqube
任务。要区分这两种情况,可以为不同的特性值添加条件。下一个示例使用项目属性作为条件:

sonarqube {
    properties {
        // Same value for both cases
        property 'sonar.projectVersion', serviceVersion
        // Value based on condition
        if (project.findProperty('fullScan') {
            property 'sonar.projectName', 'sonarqubeFullScan'
        } else {
            property 'sonar.projectName', 'sonarqubePullRequest'
        }
    }
}
或者,您可以添加该类型的另一个任务。通过这种方式,您可以对这两个任务进行不同的参数化,并在需要时调用它们(通过命令行或依赖项):

sonarqube {
    // Generated by the plugin, parametrize like described above
}

task sonarqubeFull(type: org.sonarqube.gradle.SonarQubeTask) {
    // Generated by your build script, parametrize in the same way
}

回答得很好,有一个问题,我如何通过命令行“gradle sonarqube fullScan”传递“fullScan”之类的条件?项目属性通过
-P=
设置。因此,对于上面的代码示例,可以指定
-PfullScan=true
。您还可以通过检查
hasProperty('fullScan')
将项目属性的存在作为条件,在这种情况下,
-PfullScan
就足够了。回答得很好,一个问题是如何通过命令行“gradle sonarqube fullScan”传递“fullScan”等条件?项目属性通过
-P=
设置。因此,对于上面的代码示例,可以指定
-PfullScan=true
。您还可以通过选中
hasProperty('fullScan')
将项目属性的存在作为条件,在这种情况下,
-PfullScan
就足够了。