Gradle构建-无法对任务':sonarqube'进行两次索引执行,

问题描述

在声纳的gradle构建中,我收到一个错误文件无法被两次索引”。我必须为声纳添加任何包含/排除属性吗?任何帮助都将不胜感激。

如果我在sourceSets下的测试中删除了“ src / main / java”,则将得到jun​​it测试用例的编译错误

这是我的build.gradle文件内容的外观,

group = 'groupid'
apply plugin: 'gradleFortify'
apply plugin: 'org.sonarqube'
apply plugin: 'eclipse'
apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'groovy'
//apply plugin: "java-library-distribution"
//apply plugin: 'distribution'

version=version
sourceCompatibility = 1.8


repositories {
        maven {
        url "artifactory"
            credentials {
            }
        }
        sonarqube {
            properties {
                property 'sonar.sourceEncoding','UTF-8'
                property "sonar.exclusions",["**/*Test.java"]
            }
        }
}

buildscript {
    repositories {
        maven {
        url "artifactory"
            credentials {
            }
        }
    dependencies {
        classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.9.7' 
        classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.0'
        
    }
}

sourceSets {
    main {
        java {
            srcDirs = ['src/main/java']
        }
    }
    test {
        java.srcDirs = ['src/test/java','src/main/java']
    }
}

dependencies{


}
 task preclean(type: Delete) {
     delete 'build'
 } 
 task jcompile(type: JavaCompile) {
     dependsOn preclean
     source = filetree(dir: 'src/main/java',include: '**/*.java')
     destinationDir = file('build/classes')
     sourceCompatibility = '1.8'
     targetCompatibility = '1.8'
     classpath = configurations.runtime
 }
 

 task copyResources( type: copy ) { 
 }

 task copyClasses( type: copy ) {
 }
 
 
 jar {
    dependsOn jcompile
    archiveName = 'prj1.jar'
    manifest {
        attributes('Implementation-Title': project.name,'Implementation-Version': project.version)
    }
     into('lib') {
         println "includeInJar: " + configurations.runtime.collect { File file -> file }
         from configurations.runtime
     }
 }
// jar.finalizedBy(jarTask) { }
 
 
sonarqube {
    properties {
        property "sonar.projectName","prj-${version}"
        property "sonar.projectKey","prj-${version}"
    }
}

test {
    useJUnitPlatform()
    finalizedBy jacocoTestReport
}
jacocoTestReport {
    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            filetree(dir: it,includes: ['com/**'])
        })
    }
}

解决方法

所描述的问题很可能是由Gradle开箱即用的自定义任务引起的:

  • 任务preclean可能删除了太多。请改用clean
  • 任务jcompile编译主要与compileJava重复的Java主要源代码。默认情况下,jar任务已经依赖于compileJava

我建议以下内容:

  1. 由于遵循使用sourceSetssrc/main/java的约定,因此删除src/test/java配置。
  2. 删除自定义任务precleanjcompile
  3. 清理您的构建脚本并删除空任务copyClassescopyResources以及无操作分配version=version
  4. 从那时起,如果您有自定义构建的要求,请尝试诉诸Gradle提供的功能。您可能需要先阅读Building Java & JVM projects