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

Kev*_*lan 51 java maven

我想知道在实际运行中mvn compile和运行之间的主要区别是什么mvn clean compile.

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

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

Gar*_*vis 34

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


Ste*_*n C 25

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

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

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

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