2

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

然而,我build.gradletestFixturesApiortestFixturesImplementation配置中添加的任何依赖项都被导入到 IDEA 项目中,其范围为Test(在模块设置、依赖项选项卡中可见)。

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

在使用向导设置新java-library项目gradle init并向其中添加“java-test-fixtures”插件后,可以轻松地重现此行为,然后将 dep 添加到测试夹具配置之一并将其导入到测试中的 java 文件中固定 SourceSet,然后切换 Build and run 设置并单击 build。

我正在使用 Gradle 6.0 和 IntelliJ 2019.3 BETA。

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

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

但是 IDEA Gradle 导入似乎并不尊重这一点,我怀疑它无论如何都是错误的解决方案。

有没有办法让 java-test-fixtures 插件与 IDEA 构建器一起玩得很好,而不会将我的部门从testFixturesApi配置泄漏到api配置中?

更新

所以我的团队在 IntelliJ 注册表中启用了“gradle.settings.showDeprecatedSettings”选项,目前没有使用推荐的“每个 SourceSet 的模块”选项——而是每个项目都有一个模块。此问题仅适用于每个项目的模块,已弃用。请参阅:https ://youtrack.jetbrains.com/issue/IDEA-222172

4

1 回答 1

3

所以我找到了一种解决方法:

添加新配置:

configurations {
  ideaTestFixturesApi
}

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

configurations.testFixturesApi.extendsFrom(ideaTestFixturesApi)

testFixturesApi从->迁移所有依赖ideaTestFixturesApi项,此时您的 Gradle 构建应该再次运行,并且您的 IntelliJ 构建应该以与以前相同的方式保持中断。

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

plugins {
   id 'idea'
}

// ...

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

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

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

于 2019-11-26T15:08:47.010 回答