什么时候应该重建项目"在intellij

时间:2017-10-22 21:15:50

标签: java intellij-idea

https://www.jetbrains.com/help/idea/compilation-types.html?search=rebuild

根据复杂类型的描述,重建项目会重新编译所有源文件,并在"类路径条目发生更改时建议使用它,例如,添加,删除或更改使用的SDK或库。&#34 ;

我很感激帮助解释这一点。我可以想象,如果依赖项发生更改或被删除,可能需要重新编译您的类,因为它可能无法再成功编译。但是,为什么任何 new 类会导致您重新编译现有的?

2 个答案:

答案 0 :(得分:2)

"重建项目"基本上是一个干净的构建,编译所有内容,而不是仅构建自上次构建以来已更改的类的典型增量构建。

  

但是,为什么任何新类会导致您重新编译现有类?

主要原因是确保没有重复。例如,我已经看到有人添加了已经在类路径上的库的不同版本的情况。例如,他们希望使用FancyUtils库中的foo-utilis(在v2中添加)。当他试图使用它并且找不到它时,他只是假设他需要添加foo-utils-2.0而不注意foo-utils-1.0已经在类路径上。现在这两个版本的库都存在,这可能会导致问题。也许您的项目在v1中使用的类已被删除,现在您的项目无法编译。但是如果你不做一个干净的构建,你就不会注意到它,因为使用类没有改变,也不会被重新编译。

另一种可能性是引入冲突资源。虽然只要每个人都遵循良好的包装命名惯例,但很难获得冲突类,但我已经看到它发生了。但更有可能的是,您可能有两个库都具有通常命名的资源/配置文件,如.properties文件。再次,不常见......但确实发生了。

除了那些东西,有时会发生各种奇怪的事情。如果你在添加一个库后立即找到它(因为你知道新的库是一个主要的竞争者,因为你之所以发现它,而不是几天后发现它而不是偶数),它会更容易追踪一个奇怪的问题一千倍知道从哪里开始。

就个人而言,我喜欢每隔几个小时做一次干净的身体检查。我总是在提交前和拉动&之后运行一个更新。虽然它可能只发生在一个蓝色的月亮中,但是只会出现一个只能通过干净的构造捕获的奇怪问题。

答案 1 :(得分:1)

现有类进行更改时,建议不要使用Rebuild Project。在这种情况下,正确的编译类型是:Compile <compilation_scope>Build ProjectBuild Module(因为这些都是同一形式的所有形式:编译某个范围) 。

如果您的项目发生了结构性更改,建议使用重建项目,这可能比自上次编译后更改的类集更强更多

当然,如果重建项目的成本(时间,CPU,内存......)对您来说可以忽略不计,那么您可能更愿意使用该选项,而不是想知道哪个其他选项可能就足够了其他人的超集。但是,如果成本是不可忽略的,并且您的重点是编译自上次编译以来已经更改的类,则正确的选择是涵盖更改范围的其他三个选项中的“最小”。

在实践中你可以做到这两点;在类,包,项目或模块范围内频繁构建,而不需要频繁完全重建。