Maven 2 我应该从Ant迁移到Maven吗?

Maven 2 我应该从Ant迁移到Maven吗?,maven-2,ant,migration,Maven 2,Ant,Migration,我正在从事一个相当大的项目(有许多模块、一堆外部库等),我们现在正在考虑从Ant切换到Maven。我理解两者之间的区别,但我不认为花时间转换项目布局、设置所有依赖项、教开发人员和配置经理用“新方法”做事等是值得的 网络上有很多资源描述如何从Ant迁移到Maven,但我没有发现很多资源会说为什么:-)在更改构建系统之前,问问自己(和团队)为什么要更改?如果你只是因为Maven是“新事物”而改变,不要。如果您确实看到迁移的技术原因,那么就这样做 一般来说,除非有一个主要的令人信服的理由去做(新的能力

我正在从事一个相当大的项目(有许多模块、一堆外部库等),我们现在正在考虑从Ant切换到Maven。我理解两者之间的区别,但我不认为花时间转换项目布局、设置所有依赖项、教开发人员和配置经理用“新方法”做事等是值得的


网络上有很多资源描述如何从Ant迁移到Maven,但我没有发现很多资源会说为什么:-)

在更改构建系统之前,问问自己(和团队)为什么要更改?如果你只是因为Maven是“新事物”而改变,不要。如果您确实看到迁移的技术原因,那么就这样做


一般来说,除非有一个主要的令人信服的理由去做(新的能力或更简单的管理),我会说,保持你现在的项目,但是考虑Maven对于未来的项目。

首先,像我确信很多人会提到的,Ant和Maven并不完全是为了解决相同的目标。既然你说你了解每个组件都提供了什么,我就不详细介绍了,所以只需说Ant让你定义如何构建单个组件的细节,Maven管理组件之间的依赖关系,而Maven允许您以编程方式定义从编译到测试和部署的完整项目构建周期

过去我在几个项目中使用过Maven,最近我才开始在另一个项目中使用它。有很多比较蚂蚁和Maven,所以你可以看看那些,但是从我的经验来看,它总是值得考虑如何改进一个项目。依赖关系管理和构建生命周期是任何大型项目的两个重要方面,Maven在这两个方面都有帮助。如果您已经使用ant建立了一个良好的构建系统,并且您的依赖项保存在一个易于访问的中心位置,并且您不打算扩展您的构建过程以包括任何更高级的构建管理,那么您可能应该继续使用您现有的

另一方面,如果您想使用hudson之类的持续集成服务器或nexus之类的工件存储库,那么将项目迁移到maven确实有助于提高构建效率和自动化。在这些情况下,您可能希望使用maven,因为可以使用这些类型的工具实现从依赖项到构建到工件的整个周期,并且您将能够更好地控制构建和发布。在我当前的项目中,我们有很多模块和依赖项,就像你提到的。迁移到maven以便我们可以使用hudson和nexus真的很有帮助,因为我们可以将所有这些第三方JAR放入nexus存储库,并且不再需要将它们检查到版本控制或通过电子邮件发送。此外,构建已经失控,因为CM人员有一个构建计划作为他们有时会遵循的文档,但将该计划作为项目的一部分(即pom.xml)定义了您应该如何构建并允许您实施它。Maven是把所有这些东西粘在一起的粘合剂


最后,问题在于您期望项目持续多长时间,您的流程现在有多好,您是否希望清理依赖关系,是否希望实施构建计划,以及您是否希望选择使用持续集成和工件管理。如果你想了解其中任何一种情况,Maven都是一个强有力的候选者。

在Maven之前,我们在源代码控制中检查依赖库(通常是第三方的、开源的),以便确保我们的组件按照预期的精确版本编译和打包

现在有了Maven,我们依赖于工件库来保存这些版本,我们让pom.xml依赖声明成为定义版本依赖的官方手段。这已被证明是一种简化方法,使版本控制存储库(及其Hudson构建项目)中的项目组织更易于设计。我们的本地工件存储库和我们的源代码管理存储库都处于备份策略之下。使用Maven工具进行搜索并指定所需的库版本是很好的。我们还使用父pom文件指定其他项目pom默认继承的依赖项。因此,如果您希望所有项目使用相同的log4j版本,那么在父pom文件中的一个位置指定该版本。(但任何项目都可以随时覆盖并指定特定版本,而不只是接受父pom的默认版本。)

以下是成功采用Maven的秘诀:

  • 将Maven项目构建方法用于 您的新绿地项目
  • 修改已删除的现有遗留项目 使用ant build.xml文件合并Maven任务 用于管理从属关系(混合 (方法)
这样做的好处是,您可以在Maven依赖项管理下获得所有项目,这当然是最大的好处

ant的Maven任务的好处在于,它只需要对现有的ant build.xml文件进行适当的修改,就可以将Maven合并到这个任务中,在pom.xml文件中指定所有依赖项。从ant文件的角度来看,Maven只是定义类路径定义的一种方法,随后被各种ant构建任务使用

定义类路径时,可以使用依赖项的Maven范围分类器,以便为编译、运行单元测试、打包等设置合适的类路径。pom中的其他定义也可以作为ant属性定义访问

许多现有的ant构建文件相当复杂。将此类项目转换为完整的Maven构建过程可能是一项艰巨的任务。这种混合方法让Maven管理所有依赖项,并保持ant build.xml文件的大部分不变