IntelliJ Idea中Rebuild Module为何不编译依赖模块,Build Module却可以?
问题分析:Rebuild Module与Build Module的行为差异
这不是Bug,是IntelliJ IDEA中两种构建操作的设计逻辑差异导致的,具体原因如下:
Rebuild Module的核心逻辑是:清理当前模块的所有编译输出文件,然后仅重新编译当前模块的源代码。它不会主动检查依赖模块的变更,默认认为依赖模块的编译产物是最新的。
你修改了Ders4Lib的代码(把toString改成toString2),但直接Rebuild Ders4时,Ders4Lib的编译产物还是旧版本(包含原来的toString方法),Ders4编译时引用的是新的方法名,自然会找不到符号报错。只有先Rebuild Ders4Lib生成新的编译产物,再Rebuild Ders4才能匹配上。Build Module是增量构建操作:它会先遍历当前模块的依赖链,检查每个依赖模块的源代码是否比其编译产物更新。如果依赖模块有修改,会先重新编译依赖模块,再编译当前模块。
所以你修改Ders4Lib后直接Build Module,IDE会自动先编译Ders4Lib生成新的class文件,再编译Ders4,自然不会报错。
简单总结:Rebuild Module是"单模块强制重编译",不处理依赖;Build Module是"带依赖检查的增量构建",会自动处理依赖模块的更新。
内容的提问来源于stack exchange,提问作者Kamran Baxshaliyev
相关产品推荐
相关产品推荐

