Gradle Build - 任务“:sonarqube”的执行失败无法被索引两次
Posted
技术标签:
【中文标题】Gradle Build - 任务“:sonarqube”的执行失败无法被索引两次【英文标题】:Gradle Build - Execution failed for task ':sonarqube' can't be indexed twice 【发布时间】:2021-02-03 22:08:20 【问题描述】:我在声纳的 gradle 构建中收到错误“文件无法被索引两次”。我是否必须为声纳添加任何包含/排除属性?非常感谢任何帮助。
如果我在 sourceSets 下的测试中取出“src/main/java”,我会收到 junit 测试用例的编译错误。
这就是我的 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/**'])
)
【问题讨论】:
如果我在 sourceSets 下的测试中取出“src/main/java”,我会收到 junit 测试用例的编译错误。 您需要修复该错误。请将此作为问题提出或在此问题中添加详细信息 目录结构似乎是标准的。你真的根本不需要 sourceSets。 @jayan,编译错误是由于 gradle build 没有找到对应的 java 类(说找到无效类型)。我将删除 sourceSets 并尝试一下。 删除 sourceSet 后无效。 “java:268:错误:找不到符号FAILURE:构建失败并出现异常。*出了什么问题:任务':compileTestJava'执行失败。>编译失败;有关详细信息,请参阅编译器错误输出。”。它无法找到 java 类。 请添加该错误日志。通常,生产类被添加到类路径中以进行测试。我不确定你空的依赖块是否增加了麻烦。 【参考方案1】:所描述的问题很可能是由 Gradle 提供的开箱即用的自定义任务引起的:
任务preclean
删除可能太多。请改用clean
。
任务jcompile
编译主要的Java 源代码,基本上与compileJava
重复。默认情况下,jar
任务已经依赖于compileJava
。
我建议如下:
-
删除
sourceSets
配置,因为您遵循使用src/main/java
和src/test/java
的约定。
删除自定义任务preclean
和jcompile
。
清理您的构建脚本并删除空任务copyClasses
和copyResources
以及无操作分配version=version
。
从那时起,如果您有自定义构建的要求,请尝试使用 Gradle 已经提供的功能。您可能想先阅读Building Java & JVM projects。
【讨论】:
如果我删除 sourceSets,构建将无法找到 java 类,并且没有任何已编译的.jar 依赖于 jcompile。你想让我也拿出 jar 吗? 我会先尝试删除任务jcompile
。然后从任务jar
中删除dependsOn jcompile
。如果这根本没有帮助,我想请您提供MVCE。
没有什么对我有用。经过一番研究,这个***中提供的解决方案帮助我修复了。 ***.com/questions/61707087/…以上是关于Gradle Build - 任务“:sonarqube”的执行失败无法被索引两次的主要内容,如果未能解决你的问题,请参考以下文章
build.gradle:由于“没有这样的文件或目录”,命令行任务失败
Android Gradle 插件工程根目录下 build.gradle 配置文件 ( 远程仓库配置 | 依赖配置 | 所有子模块配置 | task clean 任务 )
任务 ':app:processDebugResources' 执行失败。 com.android.build.gradle.internal.tasks.Workers$ActionFacade