从Apache Ant介绍中可以说是
为什么还有make,gnumake,nmake,jam等其他构建工具?因为所有这些工具都有局限性,Ant的原始作者在跨多个平台开发软件时无法忍受。类似Make的工具本质上是基于shell的:它们评估一组依赖项,然后执行命令,这与shell上发布的命令不同。这意味着您可以通过使用或编写正在使用的操作系统的任何程序来轻松扩展这些工具;但是,这也意味着您将自己局限于操作系统,或者至少是您正在使用的操作系统类型,例如Unix。
我不理解这句话:
"这意味着您可以通过使用或编写正在使用的操作系统的任何程序轻松扩展这些工具"
并且
"当然,这消除了一些能够构造shell命令所固有的表达能力,例如
find . -name foo -exec rm {}
,"
如果有人能帮我理解这一点请。感谢
答案 0 :(得分:1)
举个例子,假设我正在为unix开发,我需要rot13一个充满秘密的文件作为构建过程的一部分。在make
中,规则将是这样的:
kfc-spices.rot13.txt: kfc-spices.txt
tr 'A-Za-z' 'N-ZA-Mn-za-m' < kfc-spices.txt > kfc-spices.rot13.txt
只需两行文字,我就可以使用我的操作系统提供的程序轻松扩展我的构建系统,并具有rot13文件的功能。另一方面,我的构建过程将在没有提供名为tr
的程序的系统上完全失败,该程序的行为类似于unix tr
。
The "granted" line指的是通过编写java类而不是通过运行OS命令来扩展ant
的事实。因此,要在ant中移植一个文件,你必须write a custom task in java。这是更多的工作,并可能最终变得不那么灵活。 make
示例可以简单地更改为double Rot13。但是,以原始开发人员没有想到的方式使用ant任务可能很困难。