问题描述
在声纳的gradle构建中,我收到一个错误“文件无法被两次索引”。我必须为声纳添加任何包含/排除属性吗?任何帮助都将不胜感激。
如果我在sourceSets下的测试中删除了“ src / main / java”,则将得到junit测试用例的编译错误。
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
。
我建议以下内容:
- 由于遵循使用
sourceSets
和src/main/java
的约定,因此删除src/test/java
配置。 - 删除自定义任务
preclean
和jcompile
。 - 清理您的构建脚本并删除空任务
copyClasses
和copyResources
以及无操作分配version=version
。 - 从那时起,如果您有自定义构建的要求,请尝试诉诸Gradle提供的功能。您可能需要先阅读Building Java & JVM projects。