首页 文章

为什么maven?有什么好处? [关闭]

提问于
浏览
129

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

maven的支持者相信这一点

  • Maven可让您轻松获得包依赖关系

  • Maven强制您拥有标准目录结构

在我的经验中

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

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

或者我只是做错了?请指出正确的方向,我全都耳朵 .

9 回答

  • 3

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

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

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

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

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

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

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

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

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

    所以最后,我很遗憾地这么说,并不是真的Maven会扼杀你的 生产环境 力,而是你误用了你的工具 . 如果你对它不满意,那么,我能说什么,不要使用它 . 就个人而言,我从2003年开始使用Maven而且我从未回头 .

  • 10

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

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

    Henning快速项目设置,没有复杂的build.xml文件,只是一个POM,并且由于集中式POM,项目中的所有开发人员都使用相同的jar依赖项 . 为“免费”项目获取大量报告和指标可以减少源分发的大小,因为可以从中心位置抽取 jar Emmanuel Venisse有很多目标可用,所以没有必要开发一些特定的构建过程与ANT相反,我们可以使用antrun插件Jesse Mcconnell Promotes在构建过程中重用现有的ANT任务代码模块化设计 . 通过简化管理多个项目,它允许将设计布局到多个逻辑部分,通过在pom文件中使用依赖性跟踪将这些部分编织在一起 . 强制执行代码的模块化设计 . 很容易为模块化代码支付口碑服务,但是当代码在单独的编译项目中时,除非你在依赖管理中特别允许它,否则不可能在代码模块之间交叉授粉...没有'我会'现在就这样做,并在以后的实施中修复它 . 明确宣布依赖管理 . 使用依赖关系管理机制你必须尝试搞砸你的jar版本......没有任何经典问题'这个供应商jar的哪个版本是这个?'如果它存在,当你被迫在你的存储库中制作“未知”版本来启动并运行时,在现有项目中设置它会破坏现有混乱的顶部......或者说你自己知道ABC.jar的实际版本 . 强类型生命周期有一个强大的生命周期,软件系统从构建的开始到结束......用户可以将他们的系统混合和匹配到生命周期,而不是拼凑他们自己的生命周期 . 这有一个额外的好处,就是允许人们从一个项目转移到另一个项目,并在软件构建方面使用相同的词汇表Vincent Massol更大的动力:Ant现在已经成为传统,并没有快速前进 . Maven正在快速发展,并且有可能围绕Maven(CI,Dashboard项目,IDE集成等)拥有大量高 Value 工具 .

  • 9

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

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

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

  • 0

    Maven是你需要事先决定你喜欢它并想要使用它的工具之一,因为你将花费相当多的时间来学习它,并且一劳永逸地做出所述决定将允许你跳过所有类型学习时的疑问(因为你喜欢并希望使用它)!

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

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

  • 2

    Maven优于 Ant 的优势很多 . 我试着在这里总结一下 .

    Convention over Configuration
    Maven使用独特的方法进行项目布局和启动,这使得在项目中轻松跳转 . 通常它只需要checkount和maven命令来获取项目的工件 .

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

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

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

  • 6

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

  • 9

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

  • 108

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

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

  • 20

    这应该是一个评论,但它不适合评论长度,所以我发布它作为答案 .

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

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

相关问题