【问题标题】:Gradle does not download dependencies for tests defined in custom sourceSetGradle 不会为自定义 sourceSet 中定义的测试下载依赖项
【发布时间】:2013-08-11 16:54:22
【问题描述】:

我的项目结构如下:

MyProject
   --src
   --test
      --acceptance
         --java
         --resources
      --unit

以及下面的build.gradle

apply plugin: 'java'
apply plugin: 'idea'

version = '0.1'

repositories {
    mavenCentral()
}

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
    unit {
        java {
            srcDir 'test/unit'
        }
        compileClasspath += sourceSets.main.runtimeClasspath
    }
    acceptance {
        java {
            srcDir 'test/acceptance/java'
        }
        resources {
            srcDir 'test/acceptance/resources'
        }
        compileClasspath += sourceSets.main.runtimeClasspath
    }
}

dependencies {
    compile fileTree(dir: 'lib', include: '*.jar')

    unitCompile group: 'junit', name: 'junit', version: '4.11'

    acceptanceCompile group: 'junit', name: 'junit', version: '4.11'
    acceptanceCompile group: 'info.cukes', name: 'cucumber-junit', version: '1.1.3'
    acceptanceCompile group: 'info.cukes', name: 'cucumber-java', version: '1.1.3'
}


task unitTest(type: Test) {
    description = "Runs Unit Tests"
    classpath += sourceSets.unit.runtimeClasspath
    testClassesDir = sourceSets.unit.output.classesDir
}


task acceptanceTest(type: Test) {
    description = "Runs Acceptance Tests"
    classpath += sourceSets.acceptance.runtimeClasspath
    testClassesDir = sourceSets.acceptance.output.classesDir
}

但运行“gradle acceptTest”会导致编译问题,因为看起来在类路径中找不到依赖项。

【问题讨论】:

    标签: build gradle build-automation dependency-management cucumber-junit


    【解决方案1】:

    看起来在1.1.3版本中,Cucumber类在包中

    cucumber.api.junit
    

    而不是

    cucumber.junit
    

    更改导入语句似乎至少解决了类路径问题。

    但是,通过 gradle 运行 Cucumber JUnit 测试存在问题。此处提供了更多信息和使用 javaexec 任务的解决方法:https://github.com/yatskevich/cucumber-jvm-gradle-javaexec。总之,完成以下任务:

      task cucumber() {
        dependsOn assemble, compileAcceptanceJava
        doLast {
            javaexec {
                main = "cucumber.api.cli.Main"
                classpath = configurations.cucumberRuntime + sourceSets.main.output +
                        sourceSets.acceptance.output + sourceSets.unit.runtimeClasspath +
                        sourceSets.acceptance.runtimeClasspath
    
                args = ['-f', 'junit:build/reports/test-results/cucumber.xml',
                        '-f', 'html:build/reports/test/cucumber-tests.html',
                        '--glue', 'com.paragon', 'test/acceptance/features']
            }
        }
    }
    

    我们现在可以运行了

    gradle cucumber
    

    并生成 JUnit 报告。

    【讨论】:

      【解决方案2】:

      语法

      srcDir 'path/to/src/dir'
      

      正在添加一个额外的目录而不是替换默认位置。

      改为使用

      srcDrs = ['path/to/src/dir']
      

      这应该可以解决问题

      干杯, 雷内

      【讨论】:

      • 感谢您的回复 - 我尝试将 sourceSets 更改为使用 srcDirs=[...] 但不幸的是,当我运行 AcceptanceTests 目标时仍然出现相同的错误。
      • "包 cucumber.junit 不存在导入 cucumber.junit.Cucumber;"似乎表明类路径存在问题。我在构建文件那部分的语法有什么问题吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 2016-08-18
      • 2016-03-02
      相关资源
      最近更新 更多