【问题标题】:Gradle Multiproject - OpenCloverGradle 多项目 - OpenClover
【发布时间】:2017-11-11 15:46:24
【问题描述】:

我正在尝试将 Open Clover 集成到我的 Gradle 构建过程中,并遵循以下指南:

当我将它添加到我的 build.gradle 时 - 我收到以下错误:

* * What went wrong:
A problem occurred evaluating root project 'Enjin-Coin-Java-SDK'.
> Could not find method cloverCompile() for arguments [org.openclover:clover:4.2.0] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler..

我的 build.gradle 文件如下:

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://plugins.gradle.org/m2/' }
    }
      dependencies {
        classpath 'org.openclover:clover:4.2.0'
    }
}

plugins {
    id 'com.github.johnrengelman.shadow' version '1.2.4' 
    id 'java'
}

sourceSets {
    clover {
        java {
            srcDir "$buildDir/sources-instr"
        }
    }
}

apply from: 'gradle/util.gradle'

subprojects {
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'java'
    apply plugin: 'maven'
    apply plugin: 'com.github.johnrengelman.shadow'

    group = 'com.myproject'
    version = '0.0.1-SNAPSHOT'

    idea {
        module {
            scopes.PROVIDED.plus += [configurations.shadow]
        }
    }

    tasks.build.dependsOn(shadowJar)
    artifacts.archives shadowJar

    tasks.withType(AbstractCompile) {
        classpath += configurations.shadow
    }

    ext {
        mockito = '2.9.0'
        junit = '4.12'
        powermock = '1.7.3'
    }

    repositories {
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        // testCompile dependencies
        testCompile group: 'org.mockito', name: 'mockito-core', version: mockito
        testCompile group: 'junit', name: 'junit', version: junit
        testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: powermock
        testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: powermock
        cloverCompile 'org.openclover:clover:4.2.0'
    }



    jar {
        archiveName = "${project.name}-slim.jar"
    }

    shadowJar {
        archiveName = "${project.name}.jar"
    }

    install {
        repositories.mavenInstaller {
            pom.artifactId = "sdk-${project.name}"
        }
    }
}

configurations {
  cloverRuntime
  cloverRuntime.extendsFrom cloverCompile
}

task cloverInstr() {
  inputs.files sourceSets.main.allJava
  outputs.dir "$buildDir/sources-instr"

  doFirst {
    def argsList = ["--initstring", "${buildDir}/clover/clover.db", "-d", "${buildDir}/sources-instr"]
    argsList.addAll(inputs.files.files.collect({ file ->
        file.absolutePath
    }))
    String[] args = argsList.toArray()

    com.atlassian.clover.CloverInstr.mainImpl(args)
  }
}

cloverClasses.dependsOn cloverInstr

test {
    def cloverClasspath = configurations.testRuntime + configurations.cloverRuntime + sourceSets.test.output + sourceSets.clover.output
    classpath = cloverClasspath
}

task cloverReport {
    inputs.dir "${buildDir}/clover"
    outputs.dir "${reportsDir}/clover"
    onlyIf {
        file("${buildDir}/clover/clover.db").exists()
    }
    doFirst {
        def argsList = ["--initstring", "${buildDir}/clover/clover.db",
                        "-o", "${reportsDir}/clover"]
        String[] args = argsList.toArray()
        com.atlassian.clover.reporters.html.HtmlReporter.runReport(args)
    }
}

util.gradle的内容如下

ext.scriptFile = {
    String fileName ->
        return new File(new File(rootDir, 'gradle'), fileName)
}

谁能提供任何帮助来解决这个问题?

【问题讨论】:

    标签: java gradle build.gradle gradle-plugin clover


    【解决方案1】:

    使用以下脚本将 clover 集成到您的项目中:

    buildscript {
        repositories {
            mavenCentral()
            maven { url 'https://plugins.gradle.org/m2/' }
            jcenter()
        }
    }
    
    plugins {
        id 'com.github.johnrengelman.shadow' version '1.2.4'
        id "com.bmuschko.clover" version "2.1.3"
    }
    
    apply from: 'gradle/util.gradle'
    
    subprojects {
        apply plugin: 'eclipse'
        apply plugin: 'idea'
        apply plugin: 'java'
        apply plugin: 'maven'
        apply plugin: 'com.github.johnrengelman.shadow'
        apply plugin: 'com.bmuschko.clover'
    
        group = 'com.myproject'
        version = '0.0.1-SNAPSHOT'
    
        idea {
            module {
                scopes.PROVIDED.plus += [configurations.shadow]
            }
        }
    
        tasks.build.dependsOn(shadowJar)
        artifacts.archives shadowJar
    
        tasks.withType(AbstractCompile) {
            classpath += configurations.shadow
        }
    
        ext {
            mockito = '2.9.0'
            junit = '4.12'
            powermock = '1.7.3'
        }
    
        repositories {
            mavenLocal()
            mavenCentral()
        }
    
        dependencies {
            // testCompile dependencies
            testCompile group: 'org.mockito', name: 'mockito-core', version: mockito
            testCompile group: 'junit', name: 'junit', version: junit
            testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: powermock
            testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: powermock
            clover 'org.openclover:clover:4.2.0'
        }
    
        jar {
            archiveName = "${project.name}-slim.jar"
        }
    
        shadowJar {
            archiveName = "${project.name}.jar"
        }
    
        install {
            repositories.mavenInstaller {
                pom.artifactId = "sdk-${project.name}"
            }
        }
    }
    

    如果有现成插件可用,则无需手动集成。

    【讨论】:

    • 解决了这个问题,但又引入了另一个问题。 - 我已更新帖子以包含您对 build.gradle 文件的建议,还包括 build.gradle 的内容和新错误
    • @Damien,我猜你根本不知道在做什么,对吗?您需要在哪里集成 clover,根项目或子项目?另外,为什么您决定手动集成 clover 而不是使用插件?
    • 我是 gradle 新手,所以对菜鸟问题表示歉意。到目前为止,我一直在 Maven 工作。我想在根项目上设置三叶草,以便它可以检测所有子项目。我以前在 Maven 中做过这个
    • @Damien,请参阅我的更新答案。替换整个脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2013-07-16
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多