相关疑难解决方法(0)

对于具有compileOnly依赖项的单元测试,如何避免在运行时重新声明可用性的依赖项?

我目前正在使用 Gradle 构建一个项目,它依赖于我在编译时需要的第三方组件,但该组件将在运行时提供。在 Maven 中,我将按照提供的方式声明此依赖项,在 Gradle 中,我将其声明如下:

  compileOnly group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.4.0.cloudera1'
Run Code Online (Sandbox Code Playgroud)

我依赖上面的火花工件这一事实与这个问题并没有真正的密切关系(我提供此信息是为了使示例更加具体。)

现在,假设我想为我的应用程序(或库,视情况而定)编写一些单元测试。使用 Gradle 时,我想出的唯一方法很笨拙:我将依赖项重新声明为 testCompile 依赖项,并且我的测试能够运行:

  compileOnly group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.4.0.cloudera1'
  testCompile group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.4.0.cloudera1'
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢两次声明我的依赖项的重复和混乱,我想知道是否有更好的方法在 Gradle 中做到这一点?

结论

Mike 的回答让我选择了我选择的解决方案,即将其放在我的多项目构建的顶层 gradle 文件中。

subprojects {

  sourceSets {
    test.compileClasspath += configurations.compileOnly
    test.runtimeClasspath += configurations.compileOnly
  }
}
Run Code Online (Sandbox Code Playgroud)

testing dependencies gradle

5
推荐指数
1
解决办法
2512
查看次数

gradle kotlin DSL 扩展自

我该如何重新表述:

testCompile.extendsFrom compileOnly
Run Code Online (Sandbox Code Playgroud)

Gradle Groovy DSL 与其基于 Kotlin 的等效项?

configurations {
        testCompile{
            extendsFrom(compileOnly)
        }
    }
Run Code Online (Sandbox Code Playgroud)

我上面的方法失败了。

build gradle kotlin gradle-kotlin-dsl kotlin-dsl

1
推荐指数
1
解决办法
2595
查看次数