使用 Gradle 和 Groovy/Spock 测试 Java 6 库或应用程序
Using Gradle and Groovy/Spock to test a Java 6 lib or app
我有一个 Java 库,由 Gradle 2.4 构建,一些 Java 6 的应用程序将使用它,一些 Java 7 的应用程序,有些是 Java 8,有些是 Groovy 2.x。因此,为了尽可能向后兼容,我正在编写 lib 以同时具有 sourceCompatibility
和 1.6
:
的 targetCompatibility
build.gradle
============
apply plugin: 'java'
apply plugin: 'groovy'
sourceCompatibility = '1.6'
targetCompatibility = '1.6'
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile (
'org.slf4j:slf4j-api:1.7.12'
)
testCompile (
'org.codehaus.groovy:groovy-all:2.4.6'
,'org.spockframework:spock-core:1.0-groovy-2.4'
)
}
但是,我没有理由不能在 Groovy/Spock 中编写单元测试。只要 Groovy 不是 main/compile/runtime 类路径的一部分,那么我就可以自由地用我喜欢的任何 JVM 语言编写我的测试!我选择 Groovy/Spock!
问题是,我以前从来没有做过这样的事情。我 认为 我需要将 Groovy-All 和 Spock 添加到 testCompile
类路径,但是我不确定是否需要应用 Groovy插件与否,以及任何其他配置。
再次:
- 主要 compile/runtime 类路径必须 Groovy-free 并且必须与 Java 1.6
兼容
- 测试compile/runtime类路径可以包含任何我喜欢的东西
关于我需要对上面进行哪些具体更改有什么想法吗?
如果您希望 Gradle 编译 任何 Groovy,无论是主要源还是测试源,您都需要应用 groovy
gradle 插件。也就是说,只要您不是在构建一个胖 jar(即,一个包含依赖库的 JAR 库,因此它可以 运行 作为一个独立的应用程序),那么您不应该与 Groovy 在 运行 时间类路径上。你是正确的,你会想要添加 Spock/Groovy 到你的 testCompile 依赖项,只要你将它们限制在 testCompile 范围内,即使创建一个胖 JAR 也不应该将它们包含在你的主编译类路径中,在最终构建的工件,或需要在 运行 时间出现在类路径上。
相关说明,在 Gradle 中,您还可以修改任何和所有依赖项的配置。查看 Gradle Dependency Management 文档以获得更多相关信息。
我有一个 Java 库,由 Gradle 2.4 构建,一些 Java 6 的应用程序将使用它,一些 Java 7 的应用程序,有些是 Java 8,有些是 Groovy 2.x。因此,为了尽可能向后兼容,我正在编写 lib 以同时具有 sourceCompatibility
和 1.6
:
targetCompatibility
build.gradle
============
apply plugin: 'java'
apply plugin: 'groovy'
sourceCompatibility = '1.6'
targetCompatibility = '1.6'
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile (
'org.slf4j:slf4j-api:1.7.12'
)
testCompile (
'org.codehaus.groovy:groovy-all:2.4.6'
,'org.spockframework:spock-core:1.0-groovy-2.4'
)
}
但是,我没有理由不能在 Groovy/Spock 中编写单元测试。只要 Groovy 不是 main/compile/runtime 类路径的一部分,那么我就可以自由地用我喜欢的任何 JVM 语言编写我的测试!我选择 Groovy/Spock!
问题是,我以前从来没有做过这样的事情。我 认为 我需要将 Groovy-All 和 Spock 添加到 testCompile
类路径,但是我不确定是否需要应用 Groovy插件与否,以及任何其他配置。
再次:
- 主要 compile/runtime 类路径必须 Groovy-free 并且必须与 Java 1.6 兼容
- 测试compile/runtime类路径可以包含任何我喜欢的东西
关于我需要对上面进行哪些具体更改有什么想法吗?
如果您希望 Gradle 编译 任何 Groovy,无论是主要源还是测试源,您都需要应用 groovy
gradle 插件。也就是说,只要您不是在构建一个胖 jar(即,一个包含依赖库的 JAR 库,因此它可以 运行 作为一个独立的应用程序),那么您不应该与 Groovy 在 运行 时间类路径上。你是正确的,你会想要添加 Spock/Groovy 到你的 testCompile 依赖项,只要你将它们限制在 testCompile 范围内,即使创建一个胖 JAR 也不应该将它们包含在你的主编译类路径中,在最终构建的工件,或需要在 运行 时间出现在类路径上。
相关说明,在 Gradle 中,您还可以修改任何和所有依赖项的配置。查看 Gradle Dependency Management 文档以获得更多相关信息。