总是使用Maven“干净”的目标?

时间:2014-04-28 14:34:22

标签: java maven

Maven clean目标是否应该应用于每个构建作为避免陈旧CLASS文件的最佳做法?或者总是使用clean是不必要的,因为Maven足够聪明,知道哪些源代码需要根据更改重新编译?

  • 编译
  • 安装
  • 等?

Gareth Davis指出在重新命名CLASS文件后忘记运行clean的潜在危险 - https://stackoverflow.com/a/4662536/409976

示例:

  1. 编译模块(不是整个项目) - Foo.java - >目标/让Foo.class
  2. 重命名为Bar.java&重新编译模块 - > target / {Foo.class,Bar.class}
  3. 重新编译main
  4. BOOM - 其他模块代码应该无法编译,因为它依赖于制作Foo类(但由于我们没有清理它仍然存在)。
  5. 我正在研究缺少clean是否会改善共享目录中来宾VM上的构建性能。但是,我并不知道的所有后果总是先调用clean步骤。

1 个答案:

答案 0 :(得分:7)

在任何构建之前运行clean始终是一个好习惯,因为您提到的陈旧类场景是完全可能的,如果遇到,它可能会在您的最终构件中产生问题。

  

我正在研究缺少干净是否会改善来宾虚拟机的构建性能。

通过表现,我最好的猜测是你的意思是时间效率。通过避免干净的目标,您可以节省时间,因为maven将只构建完成任何更改的类,并且它将忽略未触及的类的其余部分。所以,从技术上讲,是的,你将在构建过程中节省一些时间。

  

但是,我并不知道所有后果并不总是先打电话给干净的步骤。

课堂陈旧是迄今为止您可能会遇到的最常见问题。

根据经验,我可以分享一些事情。如果您正在使用IDE并且您的项目结构有点复杂(一些依赖模块等等),那么运行mvn clean有时会混淆IDE来管理项目的构建路径,您可能会遇到{ {1}}秒。虽然不是一个大问题,但你必须做一个项目 - > maven - >更新项目以将构建路径设置为正确。

(编辑但是,如果您通过命令lien运行它,那么这个问题永远不会出现)

在您的开发计算机上,ClassNotFoundException一切都很好,但是当您在生产或测试服务器上部署构建时,最好在执行mvn install之前使用mvn clean确保没有问题出现,并且所有类在将它们包装在jar / war或任何其他内容之前构建一次