我想知道运行 mvn compile
和 mvn clean compile
之间的主要区别实际上是什么。
我明白实际的区别是什么 mvn clean compile
删除所有生成的文件并从头开始,但我们为什么要这样做?我可以假设 mvn compile
会在必要时重新生成文件,对吗?
我在我的项目中注意到的一件事是,如果您删除了一个源文件,而没有运行 clean
,编译的文件仍然存在,这通常不是问题,但我想可能是。
原文由 Kevin Dolan 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如 Gareth 的 回答 中所述,当您重命名或删除源类时,Maven 没有足够的信息知道如何从以前的构建中删除相应的编译文件。陈旧文件的存在可能会导致意外的运行时问题。需要一个
clean
来删除陈旧的文件,这样它们就不会意外地包含在 WAR、JAR 等中。此外,某些插件需要
clean
才能正常工作。例如(至少在 Maven 2 中),maven-war-plugin
将每个依赖的 WAR 分解到一个现有的目录树中。需要一个clean
来清除依赖 WAR 的先前版本遗留下来的陈旧文件。对于主流插件,这是一个合理的假设。但是,如果您使用插件生成源代码组件,我会仔细查看文档以及您放置生成的源代码的位置。例如,有几个不受支持的插件,其目的是驱动 Eclipse EMF 代码生成器。