在 Maven 中,为什么要运行“mvn clean”?

新手上路,请多包涵

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

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

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

原文由 Kevin Dolan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 894
2 个回答

正如 Gareth 的 回答 中所述,当您重命名或删除源类时,Maven 没有足够的信息知道如何从以前的构建中删除相应的编译文件。陈旧文件的存在可能会导致意外的运行时问题。需要一个 clean 来删除陈旧的文件,这样它们就不会意外地包含在 WAR、JAR 等中。

此外,某些插件需要 clean 才能正常工作。例如(至少在 Maven 2 中), maven-war-plugin 将每个依赖的 WAR 分解到一个现有的目录树中。需要一个 clean 来清除依赖 WAR 的先前版本遗留下来的陈旧文件。

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

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

原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Gareth Davis 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题