【问题标题】:Add provided dependency to test classpath using Gradle使用 Gradle 将提供的依赖项添加到测试类路径
【发布时间】:2014-12-03 15:24:13
【问题描述】:

我的provided 依赖范围配置如下。我的问题是,提供的依赖项在测试运行时不可见。如何配置它以保留依赖项 provided 但在测试类路径中可用?

apply plugin: 'java'

configurations {
    provided
}

sourceSets {
    main {
        compileClasspath += configurations.provided
    }
}

dependencies {
    provided 'com.google.guava:guava:18.0'
    provided 'org.apache.commons:commons-lang3:3.3.2'

    // Tests
    testCompile 'junit:junit:4.11'
    testCompile 'org.assertj:assertj-core:1.7.0'

    // Additional test compile dependencies
    testCompile 'joda-time:joda-time:2.2'
}

一种解决方案是添加依赖项,例如具有 testCompile 范围的 joda-time 库,但我不想复制任何条目。我确信通过适当的配置可以实现。

【问题讨论】:

    标签: java gradle build.gradle


    【解决方案1】:

    有两种方法可以做到这一点。首先,让testRuntime 配置从provided 扩展。

    configurations {
        provided
        testRuntime.extendsFrom(provided)
    }
    

    其次,您可以将provided 配置添加到test 任务的类路径中。

    test {
        classpath += configurations.provided
    }
    

    【讨论】:

    • 即使同时使用这两种配置,我仍然无法运行测试。例如,使用提供的 Joda Time,无论我得到哪种配置 Gradle: error: package org.joda.time does not exist
    • 这些是编译依赖还是运行时依赖。如果它是编译依赖项,您需要像在原始帖子中那样使用sourceSets.test.compileClasspath += configurations.provided 指定。
    • 还是不行。它可以编译,但在运行时我得到java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant 尝试使用答案中发布的选项,唯一的变化是testRuntime.extendsFrom(provided) 但仍然与java.lang.NoClassDefFoundError: junit/textui/ResultPrinter 崩溃有什么想法吗?
    • configurations 中添加了testCompile.extendsFrom(provided) 并且运行良好。您是否知道这样的配置是否正确或可能导致其他问题?
    • 你的 jar 是一个编译时间要求,所以是的,它需要在 both 编译和运行时类路径上。这可以通过您添加的答案来完成,或者通过将其添加到 sourceSet 类路径 test 任务类路径。两种解决方案大致相同。
    【解决方案2】:

    configurations 中增加了一行。不知道这是否是最好的和适当的解决方案,但可以按预期工作。

    configurations {
        provided
        testCompile.extendsFrom(provided)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 2017-12-23
      • 2023-03-02
      • 2017-01-28
      相关资源
      最近更新 更多