【发布时间】:2020-09-30 07:41:40
【问题描述】:
我有一个使用 Gradle 版本 6.4 和 JDK 8 构建的项目。我正在尝试使用 Gradle plugin for Test Fixtures (java-test-fixtures),但依赖项存在一些问题。
根据上面链接的 Gradle 页面,项目的结构应该是这样的:
core-module
-- src
-- main
-- java
-- test
-- java
-- testFixtures
-- java
虽然build.gradle.kts 文件具有以下依赖项部分:
dependencies {
api("com.my.external.project:1.0")
// ... more API dependencies
testFixturesCompileOnly(project(":core-module"))
testFixturesApi("junit:junit:4.12")
// ... more test dependencies
}
现在,在 IntelliJ(我正在使用的 IDE)中,testFixtures/java 源文件夹中的类查看 main/java 源文件夹中的类。所以我可以在testFixtures/java 下添加新的Java 类,它们依赖于main 下的那些。
但是,我将无法从外部库com.my.external.project:1.0 导入依赖项。当我尝试运行 Gradle 任务 compileTestFixturesJava 时,问题得到确认。
我可以复制dependencies 部分中的条目;例如我可以补充:
testFixturesImplementationOnly("com.my.external.project:1.0")
但这并不是我真正期望做的;尤其是当我有几十个依赖项时。
我还可以在数组中定义依赖项并在它们上运行for-each。不过,这不是最干净的解决方案。
是否有一个干净的解决方案允许testFixtures 模块使用在main 模块中声明的依赖项?
【问题讨论】:
-
有什么理由不只是使用多项目构建?
-
这是我公司的结构,我无法更改。
-
我也有同样的问题,如果你知道怎么解决,请告诉我怎么解决
-
„…那个插件的文档有多糟糕…“——我同意。当我被 Gradle 问题难住时,有人 in their forums 或 on their Slack channel 救了我。 — “……它没有它可以的那么灵活……” — 我认为该插件的目标是与 X-Unit 无关;以方便在不同项目中(重新)使用的固定装置。一个项目可能会使用 TestNG。另一个可能会使用 Spock 等。如果将 JUnit 5 烘焙到 testFixture 中,那么它可能不会像 portable 那样跨不同的项目。
-
„...你试过这个吗:
sourceSets { … }“ - @blagerweij - 这不是已经被JavaPlugin.configureSourceSets(JavaPluginConvention, BuildOutputCleanupRegistry)隐式配置了吗?JavaTestFixturesPlugin.createImplicitTestFixturesDependencies(Project, JavaPluginConvention)?
标签: java gradle dependency-management gradle-kotlin-dsl java-test-fixtures