总是使用Maven"干净"的目标?

Kev*_*ith 6 java maven

是否应该将Maven clean目标应用于每个构建作为避免过时CLASS文件的最佳实践?或者也许总是使用clean是不必要的,因为Maven足够聪明,知道哪些源代码需要根据变化重新编译?

  • 安装
  • 等等?

Gareth Davis指出clean在重新命名CLASS文件后忘记运行的潜在危险- /sf/answers/326377551/.

例:

  1. 编译模块(不是整个项目) - Foo.java - > target/Foo.class
  2. 重命名为Bar.java并重新编译模块 - > target/{Foo.class,Bar.class}
  3. 重新编译 main
  4. BOOM - 其他模块代码应该无法编译,因为它依赖于制作Foo类(但由于我们没有清理它仍然存在).

我正在研究是否缺少clean会改善共享目录中来宾VM上的构建性能.但是,我并不知道总是clean首先调用该步骤的所有后果.

Sai*_*sif 7

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

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

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

但是,我并不知道不总是首先要求清洁步骤的所有后果.

到目前为止,课堂陈旧是您可能会遇到的最常见的问题.

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

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

在您的开发机器上,一切都很好mvn install,但是当您在生产或测试服务器上部署构建时,最好mvn clean在执行之前mvn install确保没有问题出现并且所有类在将它们包装在jar中之前构建一次/战争或任何东西