Gradle java测试夹具插件是否与使用IntelliJ IDEA设置构建和运行不兼容?

Gradle java测试夹具插件是否与使用IntelliJ IDEA设置构建和运行不兼容?,gradle,intellij-idea,java-test-fixtures,Gradle,Intellij Idea,Java Test Fixtures,如果我在java Gradle项目中使用java测试夹具插件,当IntelliJ导入它时,IDE将始终将src/testFixturesdir标记为源文件夹(在模块设置中的“源”选项卡中可见) 然而,我在build.gradle中添加到testFixturesApi或testFixturesImplementation配置中的任何依赖项都会导入IDEA项目,范围为Test(在模块设置中的依赖项选项卡中可见) 因此,当我开始构建我的项目时,使用intellijidea的项目构建和运行设置,而不是默

如果我在java Gradle项目中使用java测试夹具插件,当IntelliJ导入它时,IDE将始终将
src/testFixtures
dir标记为源文件夹(在模块设置中的“源”选项卡中可见)

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

因此,当我开始构建我的项目时,使用
intellijidea
的项目构建和运行设置,而不是默认的
Gradle
(在设置->构建、执行、部署->构建工具->Gradle中可见),构建器无法从那些testfixture配置中找到dep,我得到了一堆包不存在的错误

在使用
gradle init
向导设置一个新的
java库
项目,并向其中添加“java测试装置”插件,然后向其中一个测试装置配置添加一个dep,并将其导入测试装置源集中的java文件后,可以很容易地重现这种行为,然后切换“生成并运行”设置并单击“生成”

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

我已尝试将testFixtures源目录显式标记为测试源文件夹:

idea {
    module {
        testSourceDirs += project.sourceSets.testFixtures.allJava.srcDirs
    }
}
但Gradle import的想法似乎并不尊重这一点,我怀疑这是错误的解决方案

有没有办法让java test fixtures插件在IDEA builder中运行良好,而不将我的DEP从
testFixturesApi
配置泄漏到
api
配置中

更新


因此,我的团队已经在IntelliJ注册表中启用了“gradle.settings.showDeprecatedSettings”选项,并且目前正在而不是使用建议的“每个源集的模块”选项-相反,我们每个项目都有一个模块。此问题仅适用于已弃用的每个项目的模块。请参阅:

因此我找到了一个解决方法:

添加新配置:

configurations {
  ideaTestFixturesApi
}
configurations.testFixturesApi.extendsFrom(ideaTestFixturesApi)
使现有testFixturesApi配置扩展您的新配置:

configurations {
  ideaTestFixturesApi
}
configurations.testFixturesApi.extendsFrom(ideaTestFixturesApi)
testFixturesApi
->
ideaTestFixturesApi
迁移所有依赖项,此时Gradle构建应再次运行,IntelliJ构建应保持与以前相同的中断方式

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

plugins {
   id 'idea'
}

// ...

idea {
    module {
       scopes.COMPILE.plus += [configurations.ideaTestFixturesApi]
    }
}
然后,当您通过Gradle视图刷新项目时,您将看到标记为
COMPILE
scope的每个dep,这将允许IntelliJ构建成功。您可以对
testFixturesImplementation
执行相同的操作


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

因此我找到了一个解决方法:

添加新配置:

configurations {
  ideaTestFixturesApi
}
configurations.testFixturesApi.extendsFrom(ideaTestFixturesApi)
使现有testFixturesApi配置扩展您的新配置:

configurations {
  ideaTestFixturesApi
}
configurations.testFixturesApi.extendsFrom(ideaTestFixturesApi)
testFixturesApi
->
ideaTestFixturesApi
迁移所有依赖项,此时Gradle构建应再次运行,IntelliJ构建应保持与以前相同的中断方式

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

plugins {
   id 'idea'
}

// ...

idea {
    module {
       scopes.COMPILE.plus += [configurations.ideaTestFixturesApi]
    }
}
然后,当您通过Gradle视图刷新项目时,您将看到标记为
COMPILE
scope的每个dep,这将允许IntelliJ构建成功。您可以对
testFixturesImplementation
执行相同的操作


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

可能是一个bug。有可能有一个示例项目吗?示例项目很容易创建,只需1)使用gradle init创建一个新项目2)应用插件,3)添加testFixtureApi dep,4)导入IntelliJ,您就会看到问题。最多2分钟。更多关于这个选项的信息:可能是个bug。有可能有一个示例项目吗?示例项目很容易创建,只需1)使用gradle init创建一个新项目2)应用插件,3)添加testFixtureApi dep,4)导入IntelliJ,您就会看到问题。最多2分钟。更多关于这个选项的信息请点击这里:很好的解决方案。我定义了
ideaTestFixturesApi{extendedsfrom testFixturesApi;canBeConsumed false;canBeResolved true}
,并一直使用
testFixturesApi
来声明依赖项。IdeateTestFixtureSapi基本上是testFixturesApi的一个可解析版本。很好的解决方案。我定义了
ideaTestFixturesApi{extendedsfrom testFixturesApi;canBeConsumed false;canBeResolved true}
,并一直使用
testFixturesApi
来声明依赖项。ideaTestFixturesApi基本上是testFixturesApi的可解析版本。