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
中添加到 testFixturesApi
或 testFixturesImplementation
配置的任何依赖项都被导入到 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 显示为测试源目录,这是我现在要使用的解决方法。
看起来如果我在我的 java Gradle 项目中使用 java-test-fixtures 插件,当 IntelliJ 导入它时 IDE 将始终标记src/testFixtures
dir 作为源文件夹(在模块设置的源选项卡中可见)。
然而,我在 build.gradle
中添加到 testFixturesApi
或 testFixturesImplementation
配置的任何依赖项都被导入到 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 显示为测试源目录,这是我现在要使用的解决方法。