在Maven,为什么要运行'mvn clean'?

时间:2011-01-11 20:47:28

标签: java maven

我想知道在实际操作中运行mvn compilemvn clean compile之间的主要区别是什么。

我理解实际的差异是什么,mvn clean compile删除了所有生成的文件并从头开始,但为什么我们要这样做呢?我可以假设mvn compile会在必要时重新生成文件,对吗?

我在项目中注意到的一件事是,如果你删除了一个源文件,而没有运行clean,那么编译后的文件仍然存在,这通常不会有问题,但我想是可以的。

4 个答案:

答案 0 :(得分:32)

例如:如果重命名某个类,则先前编译的版本将保留在target/classes中,直到您运行clean。这可能完全无害,但如果通过类路径扫描等自动检测它可能会导致问题。

答案 1 :(得分:23)

某些插件需要clean才能正常工作。例如(至少在Maven 2中),maven-war-plugin将每个依赖WAR分解为现有目录树。它需要clean来删除已从依赖WAR中删除的文件。

另一个问题是,当您重命名一个类时,旧的编译版本可以在构建树中闲置,并且将包含在JAR文件中,等等......直到您运行mvn clean

  

我可以假设“mvn compile”会在必要时重新生成文件,对吗?

对于主流插件,这是一个公平的假设。但是,如果您使用插件生成源代码组件,我会仔细查看文档以及放置生成的源代码的位置。例如,有一些不受支持的插件,其目的是驱动Eclipse EMF代码生成器。

答案 2 :(得分:0)

在Maven上,每次你想要编译时,最好的做法是运行" mvn clean"。它清除了您从上次编译中编译的现有类。如果你不想运行3行,只需做" mvn test"在" mvn clean"之后。你不必总是做" mvn编译"。

答案 3 :(得分:-1)

如果你不进行干净编译,那么这意味着你仍然允许使用一些过时的类。如果你的模块想要迁移到新类,那么即使你错过了,由于目标/类中存在旧类,也不会有任何编译错误。这将保持不被注意,直到在具有干净编译目标的其他地方/机器上构建相同模块。