Apache有两个单独的工具:
他们似乎都填补了相同的利基。我有两个问题:
- 两种工具之间的主要区别有哪些亮点?
- 我确信可以写一篇很长的文章,探讨两者之间的区别,我不是在寻找太多细节,也不是在寻找一个主观的论点来选择一个。
- 编程的历史-Apache如何演变为创建两组完全独立的工具,这些工具最终在目的上如此相似?
Apache有两个单独的工具:
他们似乎都填补了相同的利基。我有两个问题:
Answers:
项目结构
Maven偏爱特定的项目结构:必须致力于“ Maven之路”的工作。Maven附带了已经在pom.xml
通常由所有其他项目继承的根中配置的通用构建步骤pom.xml
。
Ant + Ivy更具开放性:尽管可以做很多事情,但在项目结构或脚本使用方面仅存在一些基本要求。没有预定的构建任务,目标或过程。每个build.xml
都是干净的(当然,除非包括另一个脚本)。
取向
Maven是面向目标的。您无需说“执行此构建目标”,而是要求它“构建”或“部署”,而Maven会做到达该目标所需要做的一切:您要说的是。
Ant + Ivy是面向任务的。每个任务都是实现定义和自定义的。您告诉它如何做自己想要的事情。
依赖管理
Maven以自动处理依赖关系而闻名。只要在存储库URL上预先进行了正确配置,它将在构建时下载正确的版本,而无需任何用户交互。
除“ Java类路径”外,Ant没有任何依赖项管理。Ivy添加了依赖管理,它比Maven繁琐,但仍然自动化。关键是您可以不选择任何依赖项管理(例如“我的发行版中包含的jar或签入源代码控制”),也可以通过Ivy将其外包。这种选择意味着可以更加灵活地满足项目需求。
使用方便
从理论上讲,Maven易于使用。任何开发人员都可以选择一个Maven项目,并立即知道所有项目资源的位置以及它们的用途:这是由于有关Maven具有特定工作方式的第一点。
由于每个项目可能不同,因此Ant + Ivy的学习曲线可能会更陡峭。不同的项目可能以不同的方式实现相同的目标。
可扩展性
Maven允许编写插件并更改其构建过程。但是,它具有一个开箱即用的根pom.xml
,可以将开发人员推向其预定的构建过程。新的目标或构建步骤需要仔细考虑并付出额外的努力才能注入到构建过程中。
Ant + Ivy还允许编写插件和新任务:这样做非常容易,并且可以轻松完成集成新任务的工作。没有预先确定的目标或目标可以洗牌或将新任务整合进去。
首先要了解的是Apache项目不过是一个单独的独立项目在其下运行的保护伞。不同的团队从事不同的项目。尽管个别开发人员可以从事多个项目,但是并没有包含Ant,Ivy和Maven的总体路线图。
蚂蚁排在第一位。它被设计为与Make等效。尽管Make可以构建Java项目,但它很繁琐:Make存在于分别编译一堆编译单元然后链接它们的情况。Java方法是javac
一次性编译所有内容,而我们所谓的“链接”实际上是在运行时在JVM的内部进行的。Make不是适合该工作的工具:Java的Makefile基本上是一个或两个目标(javac
,jar
)。
Ant在Make的基础上增加了一点结构,但并没有从根本上改变该过程。
不久之后,社区开始意识到搜寻jar文件并不有趣。此外,没有标准的方式来撰写项目。没有一致性,Java开发就一团糟。Maven旨在解决这些问题:它会带来一个通用的项目结构并自动执行jar文件的查找。
但是,Ant仍然非常有用。一些项目只是更适合Ant流程的临时性质。一些项目没有编译代码。有些项目很旧,几乎没有人会“升级”到Maven。
Ivy随之而来:它为Ant添加了依赖管理,使项目两全其美。您可以保留旧脚本,也可以保留高度自定义的环境,但是可以获得Maven最重要的功能:依赖管理。