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

时间:2012-11-11 20:53:14

标签: java maven

我即将开始一个Java项目只是为了练习。我读过关于Maven的内容,但我实际上并不了解它何时被使用。

你能给我一些实用的建议吗? Maven有很多帮助吗? Maven对我的项目实际做了什么?

3 个答案:

答案 0 :(得分:180)

它的作用

Maven是一个“构建管理工具”,用于定义.java文件如何编译为.class,打包成.jar(或.war或{{ 1}})文件,(前/后)使用工具处理,管理CLASSPATH以及构建项目所需的所有其他类型的任务。它类似于C / C ++中的Apache AntGradleMakefiles,但它试图在其中完全自包含,您不需要任何其他工具或脚本其他常见任务,如下载和安装必要的库等。

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

为什么要使用它

Maven有三件事非常很好。

  1. Maven将(在您声明正在使用哪些库之后)下载您使用 他们使用的库的所有库。这非常好,并且使得处理大量库变得非常容易。这样可以避免"dependency hell"。它类似于Apache Ant的Ivy

  2. 它使用“Convention over Configuration”,因此默认情况下您无需定义要执行的任务。您不需要像在Ant或Makefile中那样编写“compile”,“test”,“package”或“clean”步骤。只需将文件放在Maven所期望的位置,它就可以起作用了。

  3. Maven还有很多很好的插件可以安装,可以处理从generating Java classes from an XSD schema using JAXBmeasuring test coverage with Cobertura的许多例行任务。只需将它们添加到.ear,它们就会与您想要做的其他事情相集成。

  4. 最初的学习曲线很陡,但(几乎)每个专业的Java开发人员都使用Maven或希望他们这样做。你应该在每个项目中使用Maven,但是如果你需要一段时间来习惯它并且有时你希望你可以手动做事,那就不要感到惊讶,因为学习新东西有时会受到伤害。但是,一旦你真正习惯了Maven,你会发现构建管理几乎没有时间。

    如何开始

    最好的起点是“Maven in 5 Minutes”。它将帮助您开始准备一个项目,以便您编写所有必要的文件和文件夹设置(是的,我建议使用快速入门原型,至少在开始时)。

    开始使用后,您需要更好地了解该工具的使用方式。因为“Better Builds with Maven”是了解其工作原理的最彻底的地方,但“Maven: The Complete Reference”更新。阅读第一篇文章以便理解,然后使用第二篇作为参考。

答案 1 :(得分:9)

来自Sonatype doc

  

这个问题的答案取决于你自己的观点。最棒的   大多数Maven用户都会将Maven称为“构建工具”:一种工具   用于从源代码构建可部署工件。建立工程师   和项目经理可能会将Maven称为更多内容   综合:项目管理工具。有什么不同?一个   像Ant这样的构建工具只专注于预处理,   编译,包装,测试和分发。一个专案   Maven等管理工具提供了一系列功能   构建工具。除了提供构建功能外,Maven还可以   还可以运行报告,生成网站并促进沟通   在一个工作小组的成员中。

我强烈建议您查看Sonatype doc并花些时间查看可用的插件以了解Maven的强大功能。

非常简单,它的运作概念水平高于(比如说)Ant。使用Ant,您可以指定要构建的文件和资源集,然后指定您希望它们如何共振,并指定(clean / compile / jar)中应该发生的顺序。使用Maven,这一切都是隐含的。 Maven希望在特定的地方找到你的文件,并自动使用它。因此,使用Maven设置项目可以简单得多,但你必须遵守Maven的规则!

答案 2 :(得分:5)

Maven是一个构建工具。与Ant Java一起构建Maven工具 如果你是Java的新手,虽然只是使用你的IDE构建,因为{{1}}有一个陡峭的学习曲线。