分享
 
 
 

The Ant’s Story

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Translate by guipei 200501

Ant 工具估计应该不少朋友都在使用,ant也是一个不经意而成功的一个工具。它本身是为了方便tomcat项目编译出现的,最终的用户数量却远远大于了tomcat的用户,在整个的java社区广为应用。你知道它背后的故事么,这个故事来源于ant的原始发起人James Duncan Davidson的讲述,来让我们一起来了解一下吧。

我必须承认我对Ant没有什么更多的想法,仅仅一个小小构建工具,可以走得这么远以及被众多的java社区的开发人员所使用。当我编写ant的第一个版本时候,它只是一个简单的工具用来帮助我解决跨平台的编译问题。现在它已经快速的成长,被成千上万的开发者用在不同的项目当中。这后面有什么魔力呢?这个小程序被众多的人们使用?也许ant来历的故事可以提供一些线索。

在ant被纳入Apache的cvs服务前,ant已经有了相当长的开发时间。在1998年中期,我在sun任职,当时负责创建java servlet2.1规范,以及涉及其实现的工作。这个实现的规范,就是后来的Tomcat,和以前的实现相比较,这是一个全新的系统,所以其实现必须是100%的纯java应用。为了取得100%的纯java认证,我们使用sun的java平台工作。你必须给Key Labs(一个中立的认证公司)证明它可以运行在三种不同的系统平台。为了证明servelt 规范的实现可以运行在任何的地方,我选择了Solaris,Windows,和Mac 系统。然而我不仅仅想实现tomcat在不同的平台上面运行,而且还想让它可以在不同的平台上面构建和开发。我曾经试用过GNU Make工具,和系统脚本以及批处理操作。然而天知道怎么回事,不同的方式都存在不同的问题。所有的问题都可能来自于我所使用的工具使用C语言开发的。当使用它们在java方面的应用时候,可以工作,但是非常的慢。尽管java程序可以很好的实现,但是虚拟机的启动太过耗时。并且使用Make会在每一个java编译的时候创建一个虚拟几。编译一个项目的时间随着项目文件的增多,编译时间则直线上升。

我试验了很多方法来编写make 文件,来解决应该使用一个javac来编译项目中的不同源文件。但是,不管我如何努力尝试,如何多次的使用Make向导,我没有得到方法最终解决一个虚拟机编译的问题。另外,让我感到非常累的时处理make文件中的tab格式。后来我对Emacs提出过建议,希望它可以解决无意创建的空格字符。

在一次去参加欧洲会议的飞行中,我最终无法忍受创建需要运行的不同环境的不同的make文件。我开始决定开发自己的工具:可以检查一个项目中的所有源文件,比较它们最新的编译文件是否存在,然后直接调用javac编译新的java源文件。另外,它应该具有可以把一些类文件打包到一个java文件,以及可以选择复制一些文件的功能,满足不同的软件发布版本。为了确保这些事情可以工作在不同的平台上面,我决定使用java编写这个工具。 几个小时候,我有了一个可以这样运行的工具。它相当的简单,甚至有些粗遭,仅仅有几个类文件组成。我使用java.util.Properties功能实现数据层操作,而且它可以完美的工作。我的编译时间有了数量级的减少。当我返回之后,我在Solaris、Linux以及Mac系统上面做了测试,一切都非常完美。那个时候最大的问题时它仅仅有几个简单有限的功能,例如编译、复制一些文件-然而这正是它的核心功能。

在我展示这个工具的几个星期后,我命名这个工具为ant,因为这个小东西可以做大的事情。我的朋友Jason Hunter(o’reilly的servlet程序作家),他认为这是一个十分有用的工具,但也没能预料到它后来的发展。后来,我想到使用java反射功能提供一个简单的方法来扩展ant的能力,以便于程序员自己可以开发他们自己的任务来扩展它。事情开始发展,我有了第一个用户。Jason总是拥有特殊的能力发现软件中的bug,帮助我修复了其中的不少问题。

在反射功能实现以后,我又编写了更多的一些任务,ant在sun成为了一个相当有用的工具。然而,随着build文件不断变大,随着目标(任务的集合)功能的引入,属性文件不能很好的实现层次功能。我尝试着使用不同的方法解决这个问题,在一次欧洲返回的飞行中突然找到方法。就是使用XML文档的层次结构。其中也用到了以前实现XML标记解析的经验。

最终在海洋上空的飞行过程中我很好的完成了代码工作。我非常惊奇是否在高空中会增加我的能力帮助我完成任务,或者欧洲旅行给我带来了更大的创造力。更多的试验也许可以知道最终的结果。

Ant,象我们知道的一样,就这样诞生了。你现在看到的ant版本(好的或许坏的)就是来自当时的那个决定。当然,目前ant已经有了很大的改变,但是原理还是那样。在2000年后期,ant被纳入apache的tomcat旁边cvs资源库。我后来转移到其他的工作上去,主要集中在apache软件基金会的XML规范,例如sun的JAXP,以及w3c的DOM。

很让人吃惊,很多人们都在讨论Ant。第一次人们发现它工作在tomcat下面。然后它们告诉它们的朋友,然后朋友又告诉他们的朋友,等等。一些时间后,人们知道它,使用他的人竟然多于了Tomcat。一些强大的开发人员和用户社区在apache的ant下面开始成长,这个工具沿着这条路也做了很多修改。人们使用它构建各种不同的项目,从小的应用程序到巨大J2EE系统。

在2001年的JavaOne大会上,我知道了ant进入了正规发展。当时我在演示一个新的数据库开发工具,一个推荐者展示了使用设计软件在方框之间画线有多么简单。随着控制窗口的闪过,ant的每一个用户熟悉的显示过程,完整的完成了任务。我被深深的震惊了。

Ant的用户数量继续在增长。这全部都来自当时我的一个小小渴望,现在被世界上的所有java程序员所共享。也不不仅仅时java开发员,我最近以外发现了NAnt,一个Ant的.NET实现。如果我只到ant能够取得今天的巨大成功,我也许会花更多的时间,使它更加完美,更加复杂比当时发布。然而可能在易用性上面就会失败。也许ant会变得过于机械。如果我花费更多的时间让他可以完成多于工作所需要的功能,它也许变成了一个很大的工具,让它难以使用。就像我们看到的一些软件一样,例如目前的java api规范一样。这看起来有些奇怪,不想成功的ant达到了今天如此的成功。这是一个直接的答案对于这样的问题,许多人也许都发生过。我的确感到非常荣幸,幸运的发生了这个事情。

—James Duncan Davidson

San Francisco, CA, April 2002

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有