Maven在理论和实践上做了什么? 什么时候值得使用它?

我即将开始一个Java项目只是为了实践。 我已经读过关于Maven的内容,但实际上我并不明白它是什么时候使用的。

你能给我一些实用的提示吗? Maven是否帮助了很多? Maven实际上为我的项目做了什么?

它能做什么

Maven是一个“构buildpipe理工具”,它用于定义如何将.java文件编译为.class ,打包成.jar (或.war.ear )文件,(工作前/后)用工具处理,pipe理CLASSPATH ,以及所有其他需要build立您的项目的任务。 它类似于C / C ++中的Apache Ant或Gradle或Makefiles ,但它试图完全自足,不需要任何额外的工具或脚本,通过合并其他常见任务,如下载和安装必要的库等。

它也是围绕“构build可移植性”主题而devise的,因此,您不会将相同的代码与具有相同构build脚本的代码在一台计算机上工作,而不是在另一台计算机上工作(这是一个已知问题,我们有Windows 98机器,因为我们无法得到一些我们的Delphi应用程序编译其他地方)。 正因为如此,这也是在使用不同IDE的人之间处理项目的最佳方式,因为IDE生成的Ant脚本很难导入到其他IDE中,但是现在所有IDE都能理解和支持Maven( IntelliJ , Eclipse和NetBeans )。 即使你不喜欢Maven,它也会成为所有其他现代构build工具的参考点。

为什么你应该使用它

关于Maven有三件事情非常好。

  1. Maven将会(在你声明你正在使用哪一个之后)自动下载你使用的所有库 他们使用的库。 这是非常好的,并使处理很多图书馆可笑容易。 这可以让你避免“依赖地狱” 。 它与Apache Ant的常春藤类似。

  2. 它使用“ Convention over Configuration ”,因此默认情况下不需要定义要执行的任务。 您不需要像在Ant或Makefile中所做的那样编写“编译”,“testing”,“包”或“干净”的步骤。 只要把这些文件放在Maven期望的地方,它就可以工作。

  3. Maven也有很多不错的插件,你可以安装它们来处理许多日常任务,从使用JAXB的XSD模式生成Java类到用Cobertura测量testing覆盖率 。 只需将它们添加到您的pom.xml ,它们将与您想要执行的其他任何操作相集成。

最初的学习曲线是陡峭的,但(几乎)每个专业的Java开发人员使用Maven或希望他们这样做。 你应该在每个项目中使用Maven,但是如果你需要一段时间来适应它,有时候你希望你可以手动去做,因为学习新的东西有时会受到伤害。 但是,一旦你真正习惯了Maven,你会发现构buildpipe理几乎没有时间。

如何开始

最好的地方是“ 5分钟的Maven ”。 它会让你开始一个项目准备好你的代码与所有必要的文件和文件夹设置(是的,我build议使用快速启动原型,至less在第一次)。

开始之后,您需要更好地了解该工具的使用方式。 对于“ 使用Maven更好地构build ”是了解它如何工作的最彻底的地方,然而,“ Maven:完整的参考 ”是更新的。 阅读第一个了解,然后使用第二个作为参考。

从Sonatype文档 :

这个问题的答案取决于你自己的观点。 绝大多数的Maven用户都会打电话给Maven一个“构build工具”:一个用来从源代码构build可部署工件的工具。 构build工程师和项目经理可能会将Maven称为更全面的项目:一个项目pipe理工具。 有什么不同? 像Ant这样的构build工具只关注预处理,编译,打包,testing和分发。 像Maven这样的项目pipe理工具提供了构build工具中的特性的超集。 除了提供构buildfunction,Maven还可以运行报告,生成一个网站,并促进工作团队成员之间的沟通。

我强烈build议查看Sonatype文档,花一些时间查看可用的插件来了解Maven的强大function。

简而言之,它比(比如说)ant在更高的概念层面上运行。 使用Ant,您可以指定要构build的文件和资源集,然后指定如何让它们一起震动,并指定应该在(clean / compile / jar)中出现的顺序。 有了Maven,这一切都是隐含的。 Maven希望能够在特定的地方find你的文件,并且会自动运行。 因此使用Maven创build一个项目可以简单得多,但是你必须按照Maven的规则来玩!

Maven是一个构build工具。 与AntJava的构build工具。
如果您是Java的新手,但是使用IDE进行构build,因为Maven的学习曲线非常陡峭。