gpt4 book ai didi

gradle - 如何将gradle构建java项目上传到 Sonar 服务器

转载 作者:行者123 更新时间:2023-12-03 04:40:00 27 4
gpt4 key购买 nike

我已将声纳属性添加到我的build.gradle文件中,以便在使用gradle构建项目时将项目上传到服务器。下面是我的build.gradle文件。

import org.tmatesoft.svn.core.wc
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'eclipse'
apply plugin: 'findbugs'
apply plugin: 'sonar-runner'
apply plugin: "jacoco"
group = 'com.example.service'
sourceCompatibility = 1.5
version = '1.0'
jar {
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
}
}
findbugs {
// make findbugs non build breaking
ignoreFailures = true
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
compile 'org.apache.commons:commons-lang3:3.1'
compile "org.codehaus.sonar.runner:sonar-runner-api:2.4"
testCompile group: 'junit', name: 'junit', version: '4.+'
}
test {
systemProperties 'property': 'value'
}
sonarRunner {
sonarProperties {
property "sonar.host.url", "http://localhost:9000"
property "sonar.sourceEncoding", "UTF-8"
property "sonar.projectName", "$project.name"
property "sonar.projectKey", "$project.group:$project.name"
property "sonar.projectBaseDir","$project.projectDir"
property "sonar.working.directory","$project.buildDir/sonar"
property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/test.exec"
}
}
test {
jacoco {
destinationFile = file("$buildDir/jacoco/test.exec")
}
}
uploadArchives {
repositories {
mavenLocal()
}
}

但是,当我从Eclipse构建项目时,什么也没有发生。控制台中没有错误消息,项目也没有上载到声纳服务器。

有谁知道在使用Gradle进行构建时如何将项目上传到Sonar Server?

最佳答案

查看我的几篇文章,您会找到想要的东西。主要,您必须使用:

  • 应用插件:“声纳运行器”
  • 然后,我在 /init.d/someglobal.gradle文件
  • 中进行以下配置

    allprojects {

    apply plugin: 'java'
    apply plugin: 'codenarc'
    apply plugin: 'pmd'
    apply plugin: 'findbugs'
    apply plugin: 'checkstyle'
    apply plugin: 'jacoco'

    apply plugin: 'sonar-runner'

    //JavaCompile(Works with recent Gradle versions) or Compile (works with Gradle 1.6)
    //tasks.withType(Compile) {
    tasks.withType(JavaCompile) {
    options.debug = true
    options.compilerArgs = ["-g"]
    }

    //You don't need sourceSets if your project is following Maven/Gradle standard structure. In my case, we don't follow src/main/java but have src/java thus, in the global file, I have dont_change_me as the value for sourceSets main java and I'm setting it to src/java in the Project's build.gradle. dont_change_me is required here as I'm/was using sourceSet.main.xx.xxx values in few of the tasks here.

    sourceSets {
    main {
    java {
    srcDir 'dont_change_me'
    }
    resources {
    srcDir 'dont_change_me'
    }
    }
    test {
    java {
    srcDir 'dont_change_me'
    }
    resources {
    srcDir 'dont_change_me'
    }
    }
    integrationTest {
    java {
    srcDir 'dont_change_me'
    }
    resources {
    srcDir 'dont_change_me'
    }
    }
    acceptanceTest {
    java {
    srcDir 'dont_change_me'
    }
    resources {
    srcDir 'dont_change_me'
    }
    }

    }

    def sonarServerUrl = "kobalori.company.com"

    sonarRunner {
    sonarProperties {
    property "sonar.host.url", "http://$sonarServerUrl:9000"
    property "sonar.jdbc.url", "jdbc:h2:tcp://$sonarServerUrl:9092/sonar"
    property "sonar.jdbc.driverClassName", "org.h2.Driver"
    property "sonar.jdbc.username", "sonar"
    property "sonar.jdbc.password", "sonar"
    property "sonar.junit.reportsPath", "build/test-results/UT"
    property "sonar.surefire.reportsPath", "build/test-results/UT"
    //property "sonar.dynamicAnalysis", "reuseReports"
    property "sonar.binaries", "build/classes/main"
    property "sonar.java.binaries", "build/classes/main"
    // property "sonar.libraries", "build/libs/*.jar"
    property "sonar.sources", "src/java"
    //property "sonar.sources", "src/main/groovy"
    //property "sonar.sources", "src/java, src/main/groovy"
    //property "sonar.tests", "test/java, src/test/groovy, src/groovy-test, src/java-test"
    //property "sonar.tests", "src/test/groovy"
    property "sonar.tests", "test/java, src/java-test"

    //properties ["sonar.sources"] = sourceSets.main.allSource.srcDirs
    //properties ["sonar.tests"] += sourceSets.test.allJava.srcDirs
    //properties ["sonar.tests"] += sourceSets.integrationTest.allJava.srcDirs

    }
    }

    //sonarRunner {
    // toolVersion = '2.4'
    //}


    checkstyle {
    configFile = new File(rootDir, "config/checkstyle.xml")
    ignoreFailures = true
    //sourceSets = [sourceSets.main, sourceSets.test, sourceSets.integrationTest]
    sourceSets = [sourceSets.main]
    }


    findbugs {
    ignoreFailures = true
    sourceSets = [sourceSets.main]
    //toolVersion = "2.0.3"
    }

    // pmd {
    // ruleSets = ["basic", "braces", "design"]
    // ignoreFailures = true
    // }

    //Required with Gradle 2.0+ -- 2.0+ -- 2.3
    pmd {
    ruleSets = ["java-basic", "java-braces", "java-design" ]
    ignoreFailures = true
    }

    //Try this or later version too.
    //pmd {
    // toolVersion = '4.3'
    //}

    jacoco {
    //toolVersion = "0.6.2.201302030002"
    //toolVersion = "0.7.0.201403182114"
    //toolVersion = "0.7.1.201404171759"
    toolVersion = "0.7.2.201409121644"

    reportsDir = file("$buildDir/customJacocoReportDir")

    }

    task testReport(type: TestReport) {
    destinationDir = file("$buildDir/reports/tests/allTests")
    //testResultDirs = file("$buildDir/test-results/allTests")
    }


    test {
    maxParallelForks = 5
    forkEvery = 50
    ignoreFailures = true

    //testReportDir = file("$buildDir/reports/tests/UT")
    //destinationDir = file("$buildDir/reports/tests/UT")
    //testResultsDir = file("$buildDir/test-results/UT")

    //testLogging.showStandardStreams = true

    //onOutput { descriptor, event ->
    // logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )
    //}

    //Following Jacoco test section is required only in Jenkins instance extra common file
    jacoco {
    //The following vars works ONLY with 1.6 of Gradle
    // destPath = file("$buildDir/jacoco/UT/jacocoUT.exec")
    // classDumpPath = file("$buildDir/jacoco/UT/classpathdumps")

    //Following vars works only with versions >= 1.7 version of Gradle
    destinationFile = file("$buildDir/jacoco/UT/jacocoUT.exec")
    // classDumpFile = file("$buildDir/jacoco/UT/classpathdumps")
    }
    }

    task integrationTest( type: Test) {
    //Always run tests
    outputs.upToDateWhen { false }
    ignoreFailures = true

    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath

    //testReportDir = file("$buildDir/reports/tests/IT")
    //testResultsDir = file("$buildDir/test-results/IT")

    //Following Jacoco test section is required only in Jenkins instance extra common file
    jacoco {
    //This works with 1.6
    //destPath = file("$buildDir/jacoco/IT/jacocoIT.exec")
    // classDumpPath = file("$buildDir/jacoco/IT/classpathdumps")

    //Following works only with versions >= 1.7 version of Gradle
    destinationFile = file("$buildDir/jacoco/IT/jacocoIT.exec")
    // classDumpFile = file("$buildDir/jacoco/IT/classpathdumps")
    }
    }

    task acceptanceTest ( type: Test) {
    //Always run tests
    outputs.upToDateWhen { false }
    ignoreFailures = true

    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath

    //testReportDir = file("$buildDir/reports/tests/AT")
    //testResultsDir = file("$buildDir/test-results/AT")

    //Following Jacoco test section is required only in Jenkins instance extra common file
    jacoco {
    //This works with 1.6
    //destPath = file("$buildDir/jacoco/AT/jacocoAT.exec")
    // classDumpPath = file("$buildDir/jacoco/AT/classpathdumps")

    //Following works only with versions >= 1.7 version of Gradle
    destinationFile = file("$buildDir/jacoco/AT/jacocoAT.exec")
    // classDumpFile = file("$buildDir/jacoco/AT/classpathdumps")
    }
    }

    jacocoTestReport {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    //ignoreFailures = true

    //executionData = files('build/jacoco/UT/jacocoUT.exec')
    //executionData = files('build/jacoco/IT/jacocoIT.exec')
    //executionData = files('build/jacoco/UT/jacocoUT.exec', 'build/jacoco/IT/jacocoIT.exec')

    //executionData = files(['build/jacoco/UT/jacocoUT.exec', 'build/jacoco/IT/jacocoIT.exec'])
    executionData = fileTree(dir: 'build/jacoco', include: '**/*.exec')

    reports {
    xml{
    enabled true
    //Following value is a file
    destination "${buildDir}/reports/jacoco/xml/jacoco.xml"
    }
    csv.enabled false
    html {
    enabled true
    //Following value is a folder
    destination "${buildDir}/reports/jacoco/html"
    }
    }

    //sourceDirectories = files(sourceSets.main.allJava.srcDirs)
    sourceDirectories = files(['src/java','src/main/java', 'src/main/groovy'])
    classDirectories = files('build/classes/main')

    //------------------------------------------
    //additionalSourceDirs = files(['test/java','test/groovy','src/java-test', 'src/groovy-test'])
    //additionalSourceDirs = files(['src/test/groovy'])
    //additionalSourceDirs += files('src/java-test')

    //additionalClassDirs = files('build/classes/test')
    //additionalClassDirs += files('build/classes/integrationTest')
    //additionalClassDirs += files('build/classes/acceptanceTest')
    //------------------------------------------


    //IGNORE THE FOLLOWING
    //------------------------------------------
    //sourceDirectories = files(sourceSets.main.allJava.srcDirs)
    //classDirectories = files(sourceSets.main.output.classesDir)
    //classDirectories = files("build/classes/main")

    //additionalSourceDirs = files("test/java")
    //additionalSourceDirs += files("src/java-test")

    //additionalClassDirs = files("build/classes/test")
    //additionalClassDirs += files("build/classes/integrationTest")

    //additionalSourceDirs = fileTree(dir: "test", include: "**/*.*")
    //additionalSourceDirs += fileTree(dir: "src/java-test", include: "**/*.*")

    //additionalClassDirs = fileTree(dir: "build/*est", include: "**/*.class")
    //additionalClassDirs += fileTree(dir: "build/jacoco/*T/classpathdumps/com/thc", include: "**/*.class")

    //additionalClassDirectories = fileTree(dir: "build/*est", include: "**/*.class")
    //additionalClassDirectories += fileTree(dir: "build/jacoco/*T/classpathdumps/com/thc", include: "**/*.class")

    //additionalSourceDirs = files(['test/java', 'src/java-test'])
    //additionalSourceDirs = files(sourceSets.test.allJava.srcDirs)
    //additionalSourceDirs += files(sourceSets.integrationTest.allJava.srcDirs)
    //additionalSourceDirs += files(sourceSets.acceptanceTest.allJava.srcDirs)
    // additionalClassDirs = files(['build/jacoco/UT/classpathdumps/com/thc', 'build/jacoco/IT/classpathdumps/com/thc'])
    //additionalClassDirs = files(['build/jacoco/UT/classpathdumps/com/thc'])


    //additionalSourceDirs = files('test/java', 'src/java-test')
    // additionalClassDirs = files('build/jacoco/UT/classpathdumps/com/thc', 'build/jacoco/IT/classpathdumps/com/thc')

    //sourceDirectories = files('src/main/java')
    // classDirectories = files('build/classes/main')

    //sourceDirectories = fileTree('src/main/java')
    // classDirectories = fileTree('build/classes/main')


    //additionalSourceDirectories = fileTree('test/java', 'test/resources', 'src/java-test')
    // additionalClassDirectories = fileTree('build/classes/test', 'build/classes/integrationTest')


    //additionalSourceDirs = files(sourceSets.test.allJava.srcDirs,sourceSets.integrationTest.allJava.srcDirs)
    //additionalSourceDirs = files(sourceSets.*.allJava.srcDirs)
    //additionalSourceDirs += files(sourceSets.test.allJava.srcDirs)
    //additionalSourceDirs += files(sourceSets.integrationTest.allJava.srcDirs)

    //additionalSourceDirs = files('src/java', 'test/java', 'test/resources', 'src/java-test', 'conf')
    //additionalClasseDirs = files('build/classes')
    //executionData = files('build/jacoco/test.exec', 'build/jacoco/integrationTest.exec', 'build/jacoco/acceptanceTest.exec')

    //additionalSourceDirs = files(sourceSets.integrationTest.allSource.srcDirs)

    //additionalSourceDirs = files('src/java', 'test/java', 'test/resources', 'src/java-test', 'conf')
    //additionalSourceDirs = files(sourceSets.test.allJava.srcDirs)
    //additionalSourceDirs = files(sourceSets.integrationTest.allJava.srcDirs)
    //additionalSourceDirs = files([sourceSets.main.allJava.srcDirs)
    }
    }

    在我玩耍时,您可以忽略//注释掉的行。 Gradle构建完成后,您需要运行jacocoTestReport任务。

    我运行这个:
    gradle clean build jacocoTestReport

    (这将通过单元测试为我提供构建,源代码覆盖的代码)。

    为了获得IT(集成测试代码覆盖率或任何非单元测试覆盖率),我首先运行一个外部JVM(Tomcat等)。然后,我像这样将jacoco代理信息传递到外部JVM(在我的情况下为Tomcat)(在其中将jacocoagent.jar放入某个文件夹(在我的情况下为tomcat)中,并告诉外部JVM(Tomcat实例)开始填充Jacoco代码覆盖范围,这将创建jacocoIT.exec文件,以通过IT测试而非单元测试覆盖主要源代码。注意:我在Tomcat启动脚本中嵌入了此PROJ_EXTRA_JVM_OPTS变量,并将其传递给Tomcat启动命令,以便Tomcat实例知道在何处创建jacocoIT.exec文件:
    export PROJ_EXTRA_JVM_OPTS=-javaagent:tomcat/jacocoagent.jar=destfile=build/jacoco/IT/jacocoIT.exec,append=false

    然后我运行Gradle任务来运行IT测试,
    gradle integrationTest

    然后,一旦它们成功运行,您会发现jacocoIT.exec具有一定的文件大小(但仍不完整)。为了使Tomcat将代码覆盖率信息刷新到jacocoIT.exec文件中,您现在必须停止tomcat(目标JVM)实例。

    我运行stop tomcat脚本,现在Tomcat已停止。至此,我现在发现我的jacocoIT.exec文件现在已完全填充了更大的文件大小(比Stop Tomcat之前的大小)大了。

    在这一点上,我通过运行来运行Gradle jacocoTestReport和SonarRunner任务(该任务通过两个Unit + IT测试生成一个COMBINED Unit +主要源代码的IT代码覆盖率+还通过使用/设置-Dsonar.xx将信息发送给Sonar。 yy = value(可以在命令行或Jenkins中轻松传递(调用Gradle插件>开关/选项框):
    gradle jacocoTestReport -x test -x testClasses sonarRunner

    注意:确保正确传递-Dsonar.xx变量。

    例如:我在调用sonarRunner任务时传递了以下选项/开关(假设在SonarQube实例中,您的项目仪表板已放置/启用了所需的小部件):

    在这里,变量$ {testType}的值为= IT 。所有其他变量都在Jenkins全局配置中定义(JENKINS_URL等,或者可以作为Jenkins默认环境变量使用)。我正在使用SVN(作为源代码控制工具),因此使用了SVN_URL(如果您的Jenkins作业使用SVN作为 check out 源代码的源代码,则这是Jenkins的默认env变量)。
    --stacktrace -x test -x testClasses -Dsonar.jacoco.itReportPath=build/jacoco/${testType}/jacoco${testType}.exec -Dsonar.sources=src/java -Dsonar.java.binaries=build/classes/main -Dsonar.binaries="build/classes/main" -Dsonar.tests=test/java,src/java-test -Dsonar.jacoco.reportPath=build/jacoco/UT/jacocoUT.exec  -Dsonar.junit.reportsPath=build/test-results -Dsonar.surefire.reportsPath=build/test-results -Dsonar.dynamicAnalysis=reuseReports -Dsonar.build-stability.url=jenkins:${JENKINS_URL}/job/${JOB_NAME} -Dsonar.scm.url=scm:svn:${SVN_URL}

    关于gradle - 如何将gradle构建java项目上传到 Sonar 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29511760/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com