我无法让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
来工作。因为如果您更改了多个文件,则仅重新加载这一个特定文件并不是您想要的。
1条答案
按热度按时间flseospp1#
似乎是一个已知的问题IDEA-304595。
一定要投赞成票,以提高其'优先为开发人员!