java IntelliJ Gradle HotSwap构建无关模块

0g0grzrc  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(122)

我无法让Gradle HotSwap与IntelliJ IDEA合理配合使用。
我们有一个Java设置,它由一些基本模块组成,然后是一些使用这些基本模块的国家变体,甚至是GUI的国家变体。
结构如下所示:

Root
+--- buildSrc
|    \--- [Some custom precompiled groovy script plugins]
+--- CoreModules
|    \--- [Some modules]
+--- CountryVariants
|    \--- [A module for each country variant]
+--- GuiCountryVariants
|    \--- [A module for each special country GUI variant] 
\--- build.gradle (to be able to run tests for all modules at once)

这意味着,我们总是建立和管理一个特定的国家。例如,以下是GUI特定的可运行CH国家变量的依赖关系:

runtimeClasspath - Runtime classpath of source set 'main'.
+--- project :CoreModuleG
|    \--- project :GUICore
|         +--- project :CoreModuleB
|         |    \--- project :CoreModuleC
|         |         \--- project :CoreModuleP
|         |              \--- project :CoreModuleE
|         \--- project :GUICoreModuleG
+--- project :CountryVariantCH
|    \--- project :CoreModuleB (*)
\--- project :GUICore (*)

相比之下,美国的国家变体:

runtimeClasspath - Runtime classpath of source set 'main'.
+--- project :CoreModuleB
|    \--- project :CoreModuleC
|         \--- project :CoreModuleP
|              \--- project :CoreModuleE
\--- project :CoreModuleG
     \--- project :GUICore
          +--- project :CoreModuleB (*)
          \--- project :GUICoreModuleG

现在,如果我用Gradle JavaExec任务启动CH的国家变体,它当然只会编译CH所需的所有模块,并且它会像预期的那样编译国家变体US。以下是一个(缩短)摘录的启动:

Gradle Daemon started in 2 s 367 ms
> Task :buildSrc:jar UP-TO-DATE
> Task :GuiVariantCH:processResources UP-TO-DATE
> Task :CoreModuleE:jar SKIPPED
> Task :GUICoreModuleG:jar
> Task :CoreModuleP:jar
> Task :CoreModuleC:jar
> Task :GUICore:jar
> Task :CoreModuleG:jar
> Task :CountryVariantCH:jar
> Task :CoreModuleB:jar
> Task :GUIVariantCH:classes
Connected to the target VM, address: 'localhost:56923', transport: 'socket'
> Task :GUIVariantCH:run

但是如果我改变一个类,然后使用“运行>修改操作>修改类”,它会构建每个模块,包括所有24个国家/地区的变体:

11:03:47: Executing ':classes :testClasses [list of all core modules for tasks :classes and :testClasses] [list of all country variant modules for tasks :classes and :testClasses] [list of all GUI country variant modules for tasks :classes and :testClasses]'...

[long list of executions of all :classes and :testClasses tasks]

> Task :CountryVariantZA:classes
> Task :CountryVariantZA:compileTestJava UP-TO-DATE
> Task :CountryVariantZA:testClasses UP-TO-DATE
> Task :GUICountryVariantCH:classes
> Task :GUICountryVariantCH:compileTestJava NO-SOURCE
> Task :GUICountryVariantCH:testClasses UP-TO-DATE

BUILD SUCCESSFUL in 17s

但是由于我正在运行:GUICountryVariantCH:run任务,因此我希望只运行:GUICountryVariantCH:classes:GUICountryVariantCH:testClasses任务。
当然,如果我以前编译所有国家的变体,它的速度超过17秒。但它仍然在执行它不应该执行的任务,因此花费的时间比需要的时间长。
那么,这是由错误的Gradle配置,错误的IntelliJ配置(IntelliJ IDEA 2023.2.2(社区版))引起的,还是这是一个真正的IntelliJ bug?
有没有人在类似的情况下成功地使用热插拔?
我找了很远很远,但似乎没有人有这个具体的问题。
我发现的是this plugin,它可以让你热交换一个文件,所以我可以使用这个插件,当然也可以在文件的上下文菜单中使用“编译并重新加载文件”。
但我仍然觉得hotswap应该能够通过调用:specificModuleStarted:classes而不是:classes来工作。因为如果您更改了多个文件,则仅重新加载这一个特定文件并不是您想要的。

flseospp

flseospp1#

似乎是一个已知的问题IDEA-304595
一定要投赞成票,以提高其'优先为开发人员!

相关问题