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

Pio*_*iak 153 java maven

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

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

Sle*_*led 180

它能做什么

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

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

为什么你应该使用它

关于Maven有三件事非常好.

  1. Maven将(在您声明您正在使用哪些库之后)下载您使用的所有库以及它们自动为您使用的库.这非常好,并且使得处理大量库变得非常容易.这可以让你避免"依赖地狱".它类似于Apache Ant的常春藤.

  2. 它使用" 约定优于配置 ",因此默认情况下您不需要定义要执行的任务.您不需要像在Ant或Makefile中那样编写"compile","test","package"或"clean"步骤.只需将文件放在Maven所期望的位置,它就可以解决问题.

  3. Maven的也有很多很好的插件,你可以安装将要处理许多日常任务,从使用JAXB XSD模式生成的Java类,以测量测试覆盖率用Cobertura.只需将它们添加到您的身上pom.xml,它们就会与您想要做的其他事情相结合.

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

如何开始

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

开始之后,您需要更好地了解该工具的使用方式.因为" 使用Maven更好地构建 "是理解其工作原理的最彻底的地方,然而," Maven:The Complete Reference "更新.阅读第一个以便理解,然后使用第二个作为参考.

  • 有许多专业的Java开发人员不使用Maven而很高兴他们不这样做; 其中一些只是拒绝其复杂性和缺乏灵活性,并坚持使用Ant或类似的东西,但越来越多的人转而使用Graven和Buildr等Maven接班人.这些继承者从Maven继承了提供开箱即用的强大构建步骤的想法,但也使得添加自定义步骤变得非常容易.鉴于它们的存在,老实说,我认为没有任何理由将Maven用于新项目. (12认同)
  • 总是存在一个问题,即答案中有多少细节,但如果你是一个普通的Java开发人员,那么在你的办公室中,它可能是Maven或shitty Ant hell(Ant + bash + perl + build计算机配置了神奇的路径).如果你是幸运的少数几个与A +开发人员一起工作,在一个有自由选择的良好环境中,还有其他选择(Gradle就是其中之一).但是,如果你在一个普通的地方工作,Maven是最好的工具,不会让你的同事用尖锐的东西削减自己. (5认同)
  • 我不认为你必须是A +开发人员才能使用Gradle.我不明白为什么一个可以采用Maven的组织不能采用Gradle.确实,Gradle可以让你用脚射击自己,就像Ant一样,但Maven非常努力(而且我有一些同事的射击脚来证明它); 这是让Maven几乎不可能完成的事情的权衡. (4认同)
  • 在使用像Gradle这样的东西并避免射击脚的方面,我建议对程序员进行分类分类.一些程序员不会害怕编辑构建脚本,并且或多或少地做对.那些人很有用.一些程序员害怕构建脚本,并且不会触及它们.那些人至少没有害处; 我一直在一个12人的团队中,我们只有两个人敢碰这个版本,而且它实际上运作得相当好.有些程序员并不害怕构建脚本,但如果他们触摸它们就会搞砸它们.那些人很危险. (4认同)
  • 所以它就像 Java 的 npm (2认同)

Bri*_*new 9

来自Sonatype doc:

这个问题的答案取决于你自己的观点.绝大多数Maven用户都会将Maven称为"构建工具":一种用于从源代码构建可部署工件的工具.构建工程师和项目经理可能会将Maven称为更全面的东西:项目管理工具.有什么不同?像Ant这样的构建工具仅专注于预处理,编译,打包,测试和分发.诸如Maven之类的项目管理工具提供了构建工具中的功能的超集.除了提供构建功能外,Maven还可以运行报告,生成网站以及促进工作团队成员之间的沟通.

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

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

  • @Brian对不起,如果我之前的评论听起来很夸张,但让我改一下:我觉得您的评论很好地解释了Maven _if_您已经了解Maven是什么,但是作为初始起点,它没有帮助。 (2认同)

Cra*_*lus 5

Maven是一个构建工具.除了AntGradle用工具建筑.
如果你是Java的新手,虽然只是使用你的IDE构建,因为Java有一个陡峭的学习曲线.