https://www.jetbrains.com/help/idea/compilation-types.html?search=rebuild
根据复杂类型的描述,重建项目会重新编译所有源文件,并在"类路径条目发生更改时建议使用它,例如,添加,删除或更改使用的SDK或库。&#34 ;
我很感激帮助解释这一点。我可以想象,如果依赖项发生更改或被删除,可能需要重新编译您的类,因为它可能无法再成功编译。但是,为什么任何 new 类会导致您重新编译现有的?
答案 0 :(得分:2)
"重建项目"基本上是一个干净的构建,编译所有内容,而不是仅构建自上次构建以来已更改的类的典型增量构建。
但是,为什么任何新类会导致您重新编译现有类?
主要原因是确保没有重复。例如,我已经看到有人添加了已经在类路径上的库的不同版本的情况。例如,他们希望使用FancyUtils
库中的foo-utilis
(在v2中添加)。当他试图使用它并且找不到它时,他只是假设他需要添加foo-utils-2.0
而不注意foo-utils-1.0
已经在类路径上。现在这两个版本的库都存在,这可能会导致问题。也许您的项目在v1中使用的类已被删除,现在您的项目无法编译。但是如果你不做一个干净的构建,你就不会注意到它,因为使用类没有改变,也不会被重新编译。
另一种可能性是引入冲突资源。虽然只要每个人都遵循良好的包装命名惯例,但很难获得冲突类,但我已经看到它发生了。但更有可能的是,您可能有两个库都具有通常命名的资源/配置文件,如.properties
文件。再次,不常见......但确实发生了。
除了那些东西,有时会发生各种奇怪的事情。如果你在添加一个库后立即找到它(因为你知道新的库是一个主要的竞争者,因为你之所以发现它,而不是几天后发现它而不是偶数),它会更容易追踪一个奇怪的问题一千倍知道从哪里开始。
就个人而言,我喜欢每隔几个小时做一次干净的身体检查。我总是在提交前和拉动&之后运行一个更新。虽然它可能只发生在一个蓝色的月亮中,但是只会出现一个只能通过干净的构造捕获的奇怪问题。
答案 1 :(得分:1)
对现有类进行更改时,建议不要使用Rebuild Project。在这种情况下,正确的编译类型是:Compile <compilation_scope>
或Build Project
或Build Module
(因为这些都是同一形式的所有形式:编译某个范围) 。
如果您的项目发生了结构性更改,建议使用重建项目,这可能比自上次编译后更改的类集更强更多。
当然,如果重建项目的成本(时间,CPU,内存......)对您来说可以忽略不计,那么您可能更愿意使用该选项,而不是想知道哪个其他选项可能就足够了其他人的超集。但是,如果成本是不可忽略的,并且您的重点是编译自上次编译以来已经更改的类,则正确的选择是涵盖更改范围的其他三个选项中的“最小”。
在实践中你可以做到这两点;在类,包,项目或模块范围内频繁构建,而不需要频繁完全重建。