java-test-fixtures 插件是否与使用 IntelliJ IDEA 设置的 Build 和 运行 不兼容?

Is the java-test-fixtures plugin incompatible with the Build and run using IntelliJ IDEA setting?

看起来如果我在我的 java Gradle 项目中使用 java-test-fixtures 插件,当 IntelliJ 导入它时 IDE 将始终标记src/testFixtures dir 作为源文件夹(在模块设置的源选项卡中可见)。

然而,我在 build.gradle 中添加到 testFixturesApitestFixturesImplementation 配置的任何依赖项都被导入到 IDE 范围为 [= 的项目中17=](在“模块设置”的“依赖项”选项卡中可见)。

所以当我去构建我的项目时,使用项目构建和 运行 使用设置 IntelliJ IDEA 而不是默认的 Gradle (在设置 -> 构建中可见,执行、部署 -> 构建工具 -> Gradle),构建器无法从那些 testFixtures 配置中找到 deps,我得到一堆包不存在的错误。

使用 gradle init 向导设置新的 java-library 项目并向其中添加 'java-test-fixtures' 插件,然后向其中一个添加 dep 后,可以轻松重现此行为测试装置配置并将其导入测试装置 SourceSet 的 java 文件中,然后切换构建和 运行 设置并单击构建。

我正在使用 Gradle 6.0 和 IntelliJ 2019.3 测试版。

我已经尝试将 testFixtures 源目录明确标记为测试源文件夹:

idea {
    module {
        testSourceDirs += project.sourceSets.testFixtures.allJava.srcDirs
    }
}

但是 IDEA Gradle 导入似乎不支持这一点,我怀疑这是错误的解决方案。

有什么方法可以让 java-test-fixtures 插件与 IDEA builder 一起工作,而不会将我的部门从 testFixturesApi 配置泄漏到 api 配置?

更新

所以我的团队在 IntelliJ 注册表中启用了 "gradle.settings.showDeprecatedSettings" 选项,目前 NOT 使用推荐的 "Module per SourceSet" 选项 - 相反我们有一个模块每个项目。此问题仅适用于每个项目的模块,已弃用。参见:https://youtrack.jetbrains.com/issue/IDEA-222172

所以我找到了解决方法:

添加新配置:

configurations {
  ideaTestFixturesApi
}

使现有的 testFixturesApi 配置扩展您的新配置:

configurations.testFixturesApi.extendsFrom(ideaTestFixturesApi)

testFixturesApi -> ideaTestFixturesApi 迁移所有依赖项,此时您的 Gradle 构建应该再次 运行,并且您的 IntelliJ 构建应该保持损坏和以前一样的方式。

应用idea Gralde 插件并将新配置的范围切换到测试

plugins {
   id 'idea'
}

// ...

idea {
    module {
       scopes.COMPILE.plus += [configurations.ideaTestFixturesApi]
    }
}

然后当您通过 Gradle 视图刷新您的项目时,您会看到每个 dep 都标记为 COMPILE 范围,这应该允许 IntelliJ 构建成功。您可以对 testFixturesImplementation.

做同样的事情

不太理想,但似乎没有任何方法可以强制 testFixtures sourceSet 显示为测试源目录,这是我现在要使用的解决方法。