我想知道在实际操作中运行mvn compile
和mvn clean compile
之间的主要区别是什么。
我理解实际的差异是什么,mvn clean compile
删除了所有生成的文件并从头开始,但为什么我们要这样做呢?我可以假设mvn compile
会在必要时重新生成文件,对吗?
我在项目中注意到的一件事是,如果你删除了一个源文件,而没有运行clean
,那么编译后的文件仍然存在,这通常不会有问题,但我想是可以的。
答案 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)
答案 3 :(得分:-1)
如果你不进行干净编译,那么这意味着你仍然允许使用一些过时的类。如果你的模块想要迁移到新类,那么即使你错过了,由于目标/类中存在旧类,也不会有任何编译错误。这将保持不被注意,直到在具有干净编译目标的其他地方/机器上构建相同模块。