Maven在理论上和实践上做什么?什么时候值得使用?[关闭]


156

我将开始一个Java项目只是为了练习。我已经读过有关Maven的文章,但实际上我并不了解何时应该使用它。

能给我一些实用的技巧吗?Maven有很多帮助吗?Maven实际上为我的项目做什么?


HEJ,看看这个问题关于Maven,Spring和Roo的矿井。在使用Eclipse时,为了加快开发时间,我经常使用Maven。但是有一些问题。我认为您需要与Maven一起了解Java注释系统。但是看看我链接的问题..
MM24

@ArtB很好地解释了Maven是什么。但是,正如我在对他的回答的评论中所说,我不认为您应该使用它。如果需要构建工具,请使用Gradle。下载它,安装它,然后在您的项目中创建一个名为的文件build.gradle,其中仅包含一行apply plugin: 'java'。假设您的源代码位于通常的位置(在其中进行了src/main/java单元测试src/test/java),那么您现在可以说出来构建,测试和打包代码gradle build。简单!
汤姆·安德森

2
要使用Gradle,您需要学习Groovy,而且您肯定遇到使用Maven进行的项目,因此仍然值得学习。另外,了解Maven将使您更容易了解其后的其他工具。
雪橇2012年

Maven对Java注释有什么要求?
雪橇2012年

1
+1摇篮,不仅是离家较近的Java开发者,它可以重复使用Maven构件,它可以使非标很容易建立stackoverflow.com/questions/1163173/...
Kalpesh瑞里

Answers:


183

它能做什么

Maven是一个“构建管理工具”,它用于定义如何将.java文件编译为文件.class,打包为.jar.war.ear)文件,使用工具进行(预/后)处理,管理您的文件CLASSPATH以及所有其他需要执行的任务。建立您的专案。它类似于C / C ++中的Apache AntGradleMakefiles,但是它试图完全独立,通过合并其他常见任务(如下载和安装必要的库等),您不需要任何其他工具或脚本。

它还围绕“构建可移植性”主题进行设计,因此不会出现问题,因为在一台计算机上使用相同的构建脚本具有相同的代码,而在另一台计算机上却没有(这是已知问题,我们拥有Windows VM 98台计算机,因为我们无法在其他任何地方编译某些Delphi应用程序)。因此,这也是使用不同IDE的人之间进行项目工作的最佳方法,因为很难将IDE生成的Ant脚本导入其他IDE,但是当今所有IDE都理解并支持Maven(IntelliJEclipseNetBeans)。即使您最终不喜欢Maven,它最终还是所有其他现代构建工具的参考点。

为什么要使用它

关于Maven的三件事非常好。

  1. Maven会(后声明你正在使用哪些)下载所有您所使用的库这些库,他们会自动使用你。这非常好,并且使处理许多库变得异常容易。这样就可以避免“ dependency hell”。它类似于Apache Ant的Ivy

  2. 它使用“ 约定优于配置 ”,因此默认情况下无需定义要执行的任务。您不需要像在Ant或Makefile中那样必须编写“编译”,“测试”,“包”或“清理”步骤。只需将文件放在Maven期望的位置,就可以立即使用。

  3. Maven的也有很多很好的插件,你可以安装将要处理许多日常任务,从使用JAXB从XSD模式生成的Java类,以测量测试覆盖率用Cobertura。只需将它们添加到您的文件中pom.xml,它们就会与您想要执行的其他所有操作集成在一起。

最初的学习过程很艰难,但是(几乎)每个专业Java开发人员都使用Maven或希望他们这样做。您应该在每个项目上都使用Maven,但是如果花一些时间来习惯它,也不要感到惊讶,并且有时候您希望自己可以手动做一些事情,因为学习新知识有时会很痛。但是,一旦您真正习惯了Maven,您就会发现构建管理几乎不需要时间。

如何开始

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

开始使用后,您将需要更好地了解该工具的预期用途。为此,“ 使用Maven更好地构建 ”是了解其工作原理的最彻底的地方,但是,“ Maven:完整参考 ”是最新的。阅读第一个以进行理解,然后使用第二个作为参考。


12
有许多不使用Maven的专业Java开发人员,很高兴他们没有使用Maven。其中一些人只是拒绝使用它的复杂性和灵活性,而坚持使用Ant或类似工具,但是越来越多的人选择了Gradle和Buildr等Maven继任者。这些继任者从Maven继承了开箱即用地提供一组强大的构建步骤的想法,但也使添加自定义步骤变得异常容易。鉴于它们的存在,老实说,我认为没有任何理由将Maven用于新项目。
汤姆·安德森

5
总会有一个问题要回答多少细节,但是,如果您是普通的Java开发人员,那么在您的办公室中,很可能是Maven或肮脏的Ant hell(Ant + bash + perl +使用魔术路径配置的构建计算机)。如果您是在少数可以自由选择的良好环境中与A +开发人员合作的幸运者之一,则还有其他选择(Gradle是其中之一)。但是,如果您在一个普通的地方工作,Maven是最好的工具,它不会让您的同事们从尖锐的东西中脱颖而出。
雪橇2012年

4
我认为您不必成为A +开发人员即可使用Gradle。我不明白为什么可以采用Maven的组织不能采用Gradle。确实,Gradle可以让您用脚射击自己,就像Ant一样,但是用Maven很难(我有很多同事的射击脚来证明这一点);这是使Maven几乎不可能完成的事情成为可能的折衷方案。
汤姆·安德森

4
在使用诸如Gradle之类的方法并避免产生错误的情况下,我提出了一种对程序员进行分类的方法。一些程序员不会害怕编辑构建脚本,或多或少正确地处理事情。这些人很有用。一些程序员担心构建脚本,因此不会使用它们。那些人至少没有害处。我去过一个由12人组成的团队,我们当中只有两个人敢于接触这个版本,并且实际上运行得很好。一些程序员并不害怕构建脚本,但是如果接触它们会搞砸它们。那些人很危险。
汤姆·安德森

1
就像Java的npm
KJW 2013年

9

Sonatype doc中

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

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

简而言之,它在(例如)Ant的概念层次上更高。使用Ant,您可以指定要构建的文件和资源集,然后指定希望它们一起震荡的方式,并指定应该在其中进行的顺序(清理/编译/罐装)。使用Maven,这些都是隐式的。Maven希望在特定位置找到您的文件,并将自动使用该文件。因此,使用Maven设置项目可能会简单得多,但是您必须遵循Maven的规则!


我没有反对,但是也许反对者从Sonatype宣传中读到了您的报价,这是对Maven极权主义“项目管理工具”哲学的隐含认可。
汤姆·安德森

1
我不觉得你回答的问题OP,而不是你刚刚张贴的营销高谈阔论......那高谈阔论是荒谬的,因为“项目管理”是这么多的多的比Maven的做它用来混淆不止有帮助,恕我直言。
雪橇2012年

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

5

Maven是一个构建工具。伴随着Ant或者GradleJava用工具建筑。
如果您是Java的新手,尽管Maven学习曲线很困难,但只需使用IDE进行构建即可。


NetBeans中对Maven的IDE支持非常好,使学习曲线几乎不存在。
长颈鹿队长2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.