【问题标题】:What are the advantages/disadvantages of using Maven? [closed]使用 Maven 的优点/缺点是什么? [关闭]
【发布时间】:2011-04-01 12:32:45
【问题描述】:

我想知道人们使用或不使用 Maven 的原因。我们即将将所有构建切换到 Maven 2,并且不需要太多经验。

使用 Maven 2 有哪些优点/缺点,例如:

  • 为什么切换到 maven?
  • 你为什么把 maven 扔掉并使用 别的东西?
  • 出了什么问题 为你解决?
  • 出了什么问题 对你有什么影响?

谢谢!

【问题讨论】:

    标签: maven-2 build-process maven


    【解决方案1】:

    我从 maven 开始,并一直使用它。当我使用 maven 构建项目时,我从来没有遇到过缺少库、错误库版本等问题……它可以编译,它可以运行。

    库升级很简单(不像 Ant)。

    Maven 提供了许多有用的插件。我使用 maven 在 hudson 上运行功能测试 - 它下载我的项目的最新版本,启动嵌入式数据库,注入 dbunit 数据集,在码头上部署应用程序,运行测试,呈现测试结果。

    我不喜欢的一件事是将所有内容都放在一个文件中。然后我想指定配置不仅使用 XML。

    【讨论】:

      【解决方案2】:

      到目前为止,我不喜欢它。 当我使用 Maven 时,项目的构建时间会急剧增加。从 Eclipse 的几毫秒到一秒,即使是最简单的 maven 项目也超过 30 秒。

      鉴于这么多人喜欢它,我一定是做错了什么,但到目前为止,我似乎无法弄清楚为什么构建一个基于 maven 的项目需要很长时间。

      【讨论】:

        【解决方案3】:

        Maven 太棒了!

        我没有太多时间来抒情,但以下是我对 Maven 的几大好处,排名不分先后:

        • 可重复构建:如果您可以构建项目,您的同事将始终能够在他们的计算机上运行。它也可以在构建服务器上重复。
        • 构建系统标准化:了解 Maven 的新开发人员将立即知道如何构建、发布、测试等,从而消除大量学习开销。
        • 专注于自动化:Maven 使您能够围绕软件开发实现流程自动化。
        • 约定优于配置:构建工件无需设置或最少配置。
        • 依赖管理:Maven 将为您解析和管理您的依赖。
        • 测试:在项目生命周期中运行测试和集成测试的能力。
        • 插件:有数以千计的插件来执行各种任务。只需在 POM 中添加一个引用即可简单地配置这些。

        就缺点而言,人们常说最好接受 Maven 的默认设置和约定,最好在刚开始的项目开始时就开始使用它。如果您想节省在 POM 中配置 XML 的时间,我会在一定程度上同意这一点。

        我并不是一个真正的工具*者,但在 Maven 之前使用过 Make 和 Ant,我真的看不出采用 Maven 有什么缺点。这是一个高质量的工具和一个实时的节省。

        【讨论】:

          【解决方案4】:

          使用 Maven 的最大优势在于它的存储库基础架构。这促进了共享 3 方库的标准协议,并使团队能够更有效地协作,而不必将所有内容都签入同一源代码存储库(模块化构建)。

          存储库管理器是免费提供的,我建议安装以下之一:

          • 连结
          • 神器
          • 档案

          好消息是,您不必为了充分利用 Maven 基础架构的好处而使用 Maven 构建代码。

          我推荐 Maven 用于没有遗产可保护的“绿地”项目。项目的开始通常是引入新技术的最佳时机,使用 Maven 的好处是有据可查的。亮点是标准化的构建过程和丰富的第 3 方插件。

          可以重新设计 ANT 项目以与使用 Maven 的团队进行互操作。正确应用的ivy 插件实际上可以简化ANT 构建过程。 Ivy 能够通过从 Maven 存储库下载依赖项并随后发布构建工件来管理项目的类路径(就像 Maven “部署”一样)。

          最后ivy 被嵌入到其他构建工具中。例如Gradlesimple-build-tool 等新构建工具和Grails 等开发系统。因此,欢迎使用 Enterprise Maven 存储库并选择适合项目团队的构建工具。

          【讨论】:

            【解决方案5】:

            我同意 Mark 的观点,它非常适合新建项目。在您的开发环境中启动和运行它需要一些开销,但非常值得。

            我可能会补充一点,使用 Maven 的一个潜在危险是,如果您正在处理一个大型项目,则可能难以维护存储库中的 jar。您最终可能会在 POM.xml 中使用多个不同版本的 jar。

            与任何项目一样,请确保您制定了良好的政策和程序,以便将不同的 Jars 引入您的代码库。这些 jar 可以有不同的许可证,可能会将您的代码库暴露给开源世界。确保这些许可证已由您审核。

            【讨论】:

            • Maven 解决了一个特定问题,即在没有依赖管理的情况下有效地进行依赖管理,或者使用 Ivy。就个人而言,对于大型多项目工作计划,迟早您将不得不查看有效的 POM,这就是我发现 Maven 变得难以管理或难以管理的地方...除非您受到纪律处分开始。这就是为什么 Gradle 对我来说,从 那个 的角度来看更加用户友好,并没有因为 Maven 的核心优势而取消 Maven,而且在复杂性方面更易于管理。不过,这取决于你。
            【解决方案6】:

            在过去 4 年左右的时间里,我在遇到的每个项目中都使用过 maven,从私人小型项目到大型企业数十个模块的项目,我从未后悔过使用 maven。

            我已经使用 maven 构建了从标准 java JAR / WAR / EAR 项目到 flex / AIR 应用程序和 Linux RPM 的任何东西,当没有适用于给定情况的 maven 插件时,委托给 AntrunGMaven

            标准 maven 生命周期的强大功能和舒适性与用于代码生成、文档、代码度量等的大量可用插件相结合,这些插件通常都很容易使用,这使得 maven 成为 Java 构建系统的唯一真正选择。

            继续抨击它,但在你发明更好的东西之前,我会继续使用它。

            【讨论】:

            • 我完全同意。使用 polyglot maven,您甚至不再需要使用 xml,这在我看来是 maven 的缺点之一。对于复杂的项目,pom 很快就会变得非常大。另一方面,如果您使用的是像 m2eclipse 提供的那样的 pom 编辑器,那么在大多数情况下,您不必直接处理它。尽管如此,多语言 maven 规则:)