为什么maven?有什么好处?

时间:2010-08-28 05:12:11

标签: java maven build build-process

与使用蚂蚁相比,使用maven的主要好处是什么? 它看起来更像是一种烦恼而不是一种有用的工具。 我使用maven 2,使用普通的Eclipse Java EE(没有m2eclipse)和tomcat。

maven的支持者相信

  1. Maven可让您轻松获得包依赖

  2. Maven强迫您拥有标准目录结构

  3. 根据我的经验

    1. 确定包依赖关系并不是那么难。无论如何你很少这样做。可能在项目设置期间一次,在升级期间更多。使用maven,你最终会修复不匹配的依赖关系,写得不好的poms以及无论如何都要进行包排除。

    2. 慢速FIX-COMPILE-DEPLOY-DEBUG循环,它会降低生产力。这是我的主要抱怨。你做了一个改变,你必须等待maven build进入并等待它部署。没有任何热门部署。

    3. 或者我只是做错了?请指出正确的方向,我全都听见了。

9 个答案:

答案 0 :(得分:108)

  

确定包依赖性并不是那么难。无论如何你很少这样做。可能在项目设置期间一次,在升级期间更多。使用maven,你最终会修复不匹配的依赖关系,写得不好的poms以及无论如何都要进行包排除。

玩具项目并不那么难。但是我工作的项目中有很多很多,我很高兴能让它们过渡,为它们制定标准化的命名方案。手动管理所有这些将是一场噩梦。

是的,有时您必须处理依赖关系的融合。但想想它两次,这不是Maven所固有的,这是任何使用依赖关系的系统所固有的(我在这里谈论的是Java依赖关系)。

所以使用Ant,你必须做相同的工作,除了你必须手动完成所有事情:获取项目A及其依赖项的某个版本,获取项目B及其依赖项的某些版本,弄清楚他们使用的确切版本,检查它们是否重叠,检查它们是否不相容等等。欢迎来到地狱。

另一方面,Maven支持依赖管理,并将为我传递它们,并为我提供管理依赖管理固有的复杂性所需的工具:我可以分析依赖树,控制传递依赖中使用的版本,排除其中一些 if ,控制跨模块的收敛等。没有魔法。但至少你有支持。

不要忘记,依赖管理只是Maven提供的一小部分,还有更多(甚至没有提及与Maven很好地集成的其他工具,例如Sonar)。

  

缓慢的FIX-COMPILE-DEPLOY-DEBUG循环,这会导致生产力下降。这是我的主要抱怨。你做了一个改变,你必须等待maven build进入并等待它部署。没有任何热门部署。

首先,你为什么要像这样使用Maven?我不。我使用我的IDE来编写测试,代码直到它们通过,重构,部署,热部署并在我完成之前运行本地Maven构建,然后提交,以确保我不会破坏连续构建。

其次,我不确定使用Ant会让事情变得更好。根据我的经验,使用二进制依赖项的模块化Maven构建比典型的单片Ant构建提供了更快的构建时间。无论如何,看看Maven Shell是否已准备好(重新)使用Maven环境(顺便说一句,它很棒)。

所以最后,我很遗憾地说,这并不是真正的Maven会影响你的工作效率,而是你误用了你的工具。如果你对它不满意,那么,我能说什么,不要使用它。就个人而言,我从2003年开始使用Maven,我从未回头。

答案 1 :(得分:20)

Maven可以被视为完整的项目开发工具,而不仅仅是像Ant这样的构建工具。 您应该使用Eclipse IDE with maven plugin来解决所有问题。

Maven的一些优点,引自Benefits of using Maven页面:

  

的Henning

     
      
  • 快速项目设置,没有复杂的build.xml文件,只是一个POM并且去
  •   
  • 项目中的所有开发人员都使用相同的jar依赖项   集中的POM。
  •   
  • 为“免费”项目获取大量报告和指标
  •   
  • 减少源分发的大小,因为jar可以   拉从中央位置
  •   
     

Emmanuel Venisse

     
      
  • 有很多目标可供使用,因此没有必要开发一些   具体的构建过程部分相反   对于ANT,我们可以重用现有的ANT任务   在使用antrun插件的构建过程中
  •   
     

Jesse Mcconnell

     
      
  • 促进代码的模块化设计。通过简化管理多种方式   它允许设计的项目   布局成多个逻辑部分,   将这些零件编织在一起   在pom中使用依赖性跟踪   文件。
  •   
  • 强制执行代码的模块化设计。很容易支付lipservice模块化   代码,但代码是分开的   编译项目是不可能的   交叉授粉之间的参考   代码模块,除非你   特别允许在你的   依赖管理......没有   “我现在就做这件事并解决它   后来的'实施。
  •   
  • 明确宣布依赖管理。与依赖   你必须尝试的管理机制   搞砸你的罐子   版本化...没有   '哪个版本的经典问题   这个供应商的罐子是这个吗?并设置   它在一个现有的项目上撕裂了   如果它存在的混乱   你被迫做的时候就存在了   存储库中的“未知”版本   把事情搞定......或那个   骗你自己,你知道   ABC.jar的实际版本。
  •   
  • 强类型生命周期有一个强大的定义生命周期a   软件系统来自于   建立到底的建设......   并且允许用户混合和   将他们的系统与生命周期相匹配   而不是拼凑自己的   生命周期..这还有额外的   允许人们搬家的好处   从一个项目到另一个项目并发言   使用相同的词汇表   软件构建
  •   
     

Vincent Massol

     
      
  • 更大的动力:Ant现在已经成为传统,并没有快速前进。 Maven是   快速前进并且有一个   有很多高价值的潜力   Maven周围的工具(CI,Dashboard   项目,IDE集成等)。
  •   

答案 2 :(得分:10)

确定小项目的依赖关系并不难。但是一旦你开始处理具有数百个依赖关系的依赖树,事情很容易就会失控。 (我是根据这里的经验说的......)

另一点是,如果您使用具有渐进式编译和Maven支持的IDE(如Eclipse + m2eclipse),那么您应该能够设置编辑/编译/热部署和测试。

我个人不这样做,因为我过去因为糟糕的经历(Maven之前)而不相信这种发展模式。也许有人可以评论这是否真的适用于Eclipse + m2eclipse。

答案 3 :(得分:9)

Maven是你需要实际决定你喜欢它并想要使用它的工具之一,因为你将花费相当多的时间来学习它,并做出一次所述的决定而且对于所有人来说,你可以在学习的同时跳过各种疑问(因为你喜欢它和想要使用它)!

强大的惯例在许多地方都有帮助 - 比如哈德森可以用Maven项目创造奇迹 - 但最初可能很难看到。

编辑:截至2016年,Maven是唯一的Java构建工具,所有三个主要IDE都可以使用开箱即用的源代码。换句话说,使用maven会使您的构建与IDE无关。这允许例如使用Netbeans分析,即使你通常在eclipse中工作

答案 4 :(得分:9)

Maven优于蚂蚁的优势很多。我试着在这里总结一下。

约定优于配置
Maven使用独特的方法进行项目布局和启动,这使得在项目中轻松跳转。通常它只需要checkount和maven命令来获取项目的工件。

项目模块化
项目约定建议(或更好地,强制)开发人员模块化项目。您通常不得不将项目划分为较小的子组件,而不是整体项目,这样可以更轻松地调试和管理整个项目结构

依赖关系管理和项目生命周期
总的来说,通过良好的SCM配置和内部存储库,依赖关系管理非常简单,您再次被迫考虑项目生命周期 - 组件版本,发布管理等。比蚂蚁更复杂一点,但同样,项目质量的提高。

maven有什么问题?
Maven并不容易。 POM中的构建周期(完成的内容和时间)并不那么明确。此外,组件的质量和公共存储库中缺少依赖性也会产生一些问题 对我来说,最好的方法是拥有一个内部存储库,用于缓存(和保持)依赖关系,并应用于组件的发布管理。对于比书中的示例项目更大的项目,您将在

之前或之后感谢maven

答案 5 :(得分:6)

Maven可以通过采用标准惯例和实践来为您的构建过程带来好处,从而加快您的开发周期,同时帮助您获得更高的成功率。有关Maven如何帮助您完成开发过程的更详细信息,请参阅使用Maven的好处。

答案 6 :(得分:3)

Maven是一个功能强大的项目管理工具,它基于POM(项目对象模型)。它用于项目构建,依赖和文档。 它简化了像ANT这样的构建过程。但它比ANT先进得多。 Maven帮助管理 - 构建,文档,Reporing,供应链管理系统,发布,分发。 - maven repository是包含pom.xml文件的打包JAR文件的目录。 Maven在存储库中搜索依赖项。

答案 7 :(得分:2)

我从未遇到第2点?你能解释为什么你认为这会以任何方式影响部署。如果maven允许您以模块化方式构建项目,实际上允许对特定层中的错误进行热修复,并允许从项目的其余部分独立开发API。

您可能正在尝试将所有内容塞入单个模块中,在这种情况下问题根本不是真正的问题,而是您使用它的方式。

答案 8 :(得分:0)

这应该是评论,但它不符合评论长度,所以我将其作为答案发布。

其他答案中提到的所有好处都可以通过比使用maven更简单的方式实现。例如,如果你是一个项目的新手,你无论如何都要花更多的时间来创建项目架构,加入组件,编码而不是下载jar并将它们复制到lib文件夹。如果您在您的域中有经验,那么您已经知道如何使用哪些库启动项目。我没有看到使用maven的任何好处,特别是当它自动执行“依赖管理”时会带来很多问题。

我只有maven的中级知识,但我告诉你,我没有使用maven就完成了大型项目(如ERP)。