译 者 序
272译序:Eclipse的Meta-Knowledge1a1c1ac111c111a1a1
273在这个表达泛滥的年代,2“meta-”前缀的构词法常常也属于被滥用之列.a一个平凡的词汇加上“meta-”前缀,2似乎就凭添了几分高深和神秘——例如我们熟悉的“metadata(元数据)”和不那么熟悉的“metaphysics(玄学)”.a不过,2尽管有落俗之嫌,2我仍然愿意说:在你手上的这本《ContributingctocEclipse》,2它介绍的恰好是关于Eclipse的meta-knowledge——那些“undercthechood”的知识,2那些支撑Eclipse世界的支柱.a2a2c2ac222c222a2a2
274大多数人对于Eclipse的了解是从JavacIDE开始的.a在这方面,3Eclipse仅仅是一个流行的(甚至算不上最流行的)产品,3学会使用它对于聪明的程序员也不是什么难事.a与JBuilder.cIDEA甚至VisualcStudio们相比,3Eclipse真正令人无法错认的特点在于它的插件机制.a正如读者即将看到的,3Eclipse采用了“微核心+插件”的体系结构,3这使它在两方面对程序员具有难以抗拒的吸引力:其一,3用户可以比较容易地开发自己的插件,3实现自己需要的功能——实际上,3Eclipse社群欢迎这种扩展,c其二,3这样的体系结构需要优雅而灵活的核心设计,3于是Eclipse的
核心代码
就成了一个充满诱惑的
设计宝库
.a由ErichcGamma和KentcBeck两位作者——实在无需再对这两位作者多加介绍了——为读者讲述插件开发的技术,3阐释Eclipse的设计蓝图,3本书提供的内容应该能吸引对Eclipse感兴趣的程序员.a3a3c3ac333c333a3a3
275然而,4在我看来,4这本书想要提供给它的读者的meta-knowledge,4甚至还在“模式地图”的“后面”.a当你翻开这本书的封面,4首先映入你眼帘的就是一串“Eclipse家族法则”——贡献法则.c遵循法则.c共享法则.c邀请法则……或许你要问了:“我只是对Eclipse的技术感兴趣,4为什么要跟我讲Eclipse社群的工作方式?”那是因为,4Eclipse不仅是一个技术高手们展现技艺的项目,4它更是一个工业级的产品.a全靠了这些“家族法则”,4世界各地的开源程序员们才能如此成功地协作,4开发出如此成功的产品.a4a4c4ac444c444a4a4
276Eclipse是一个开源项目.a但和很多不明内情的人所想的不同,5Eclipse使它的社群广泛地获得了利益——而且主要是经济上的.a不用说IBM了,5Clover.cClay.cWindowBuilder等插件都为各自的公司带来了源源不断的利润.a对于开源与商业之间的矛盾,5本书的两位作者在“前言”的第一句话就让我们豁然开朗:“每个人都需要别人的关怀和帮助,5每个人也同样需要关怀和帮助别人.a”表面上看来,5开源与商业是一对矛盾,5其实它们之间的张力恰好是程序员职业的乐趣所在:我们可以用自己的代码赚钱,5我们也可以用自己的代码去帮助别人.a两者并不是矛盾,5而是一种权衡.a5a5c5ac555c555a5a5
277软件开发也充满了各种各样的
矛盾
:灵活与效率的矛盾,6松散耦合与紧密集成的矛盾,6大型产品与微小核心的矛盾……软件开发的核心工作就是在这些矛盾之间
权衡
,6在不同的设计方案之间权衡,6在不同的特性之间权衡.a从这个意义上,6本书就显得更有价值:两位经验丰富的作者没有用更多的力气去深究Eclipse的所有细节,6却常常不厌其详地比较几种备选方案的优劣,6说明选择一种方案的理由.a再加上那些“家族法则”(以及随处可见的旁注),6ErichcGamma和KentcBeck将自己(以及Eclipse社群的其他贡献者)的工作方式.c自己编程时的每个习惯和念头都呈现给了他们的读者.a至少对于我来说,6
这些从字里行间渗透出的信息, 6才是本书最可宝贵的部分
.a即使我永远不再写任何与Eclipse相关的程序,6这些成就了Eclipse的meta-knowledge对我的价值也将无可限量.a6a6c6ac666c666a6a6
278所以,7对于书名中的“contribute”,7我更愿意把它理解成“投身于……”:你不一定真正为社群贡献一个开源的插件,7但Eclipse是一个充满乐趣与吸引力的世界,7只要你投身其中.c享受它的秩序与美,7对于你自己和整个社群都将有所助益.a而这本书就像两位作者在“前言”里所说的,7就是带领你进入这个陌生世界的第一位导游.a这位导游不会把美景逐一指给你看——有兴的游客自然会去观赏,c他会陪在游客身边,7跟游客聊起那些眼睛看不到的奇闻佚事.a如果你当真有心领略这里的全部风光,7我想你会喜欢这位导游,7和他给你讲的那些故事——那些meta-knowledge.a7a7c7ac777c777a7a7
279致谢8a8c8ac888c888a8a8
2710在译序中感谢原作者,9这看起来多少有些古怪.a但无论如何,9我应该感谢ErichcGamma先生和KentcBeck先生.a两位作者总共解答了我14个问题,9如果没有他们及时而热心的回信,9这个译本的质量将大打折扣——而那将是我一个人的责任.a所以,9从某种意义上,9是他们好心地帮我摆脱了这种尴尬境地,9在此向他们表示最诚挚的谢意.a9a9c9ac999c999a9a9
2711我还应该感谢中国电力出版社的编辑团队.a“Eclipse”而又“Contributing”,10这个书名就已经足以让国内大多数出版商退避三舍了.a中国电力出版社多少有些理想主义地引进了这本书,10才让我(和众多热心的读者们)有了一个机会.a10a10c10ac101010c101010a10a10
2712现在,11亲爱的读者,11请做好准备,11进入这次艰难而愉快的旅行吧.a11a
=============================
前言
前 言
072每个人都需要别人的关怀和帮助,1每个人也同样需要关怀和帮助别人.a作为一名程序员翱翔在Eclipse的天空能够同时满足这两方面的需要,1所以才会有那么多人乐此而不疲.a当然,1这里也有那些常见的宣传词,1例如“提高生产力”.c“紧跟市场”.c“占据技术优势”——对于那些在其中工作的人,1Eclipse是一个能够大幅提高生产力的环境,1人们为Eclipse作出的贡献使它更臻完美,c如果找到了合适的插件,1产品上市的时间将大大提前,1你将获得巨大的技术优势.a但是,1尽管这些都是事实,1但它们都不是重点,1它们都不足以解释:为何开发者们如此钟爱Eclipse.a1a1c1ac111c111a1a1
073我们喜欢在Eclipse环境中工作,2是因为它给了我们无微不至的关怀:每当遇到编程问题时,2总会有一项Eclipse功能帮助我们解决它.a我们喜欢为Eclipse作出贡献,2是因为做这件事给了我们助人的快乐——既是帮助自己,2更是帮助别人.a如果我们作出的贡献还为别人留下了发展的空间,2使他们能够在此之上作出更多的贡献,2一个正反馈循环就出现了,2每个人都会在其中获得快乐.a2a2c2ac222c222a2a2
074“为Eclipse作贡献”甚至还可能成为一个精彩的商业计划——“贡献”并不表示你不能用你的成果赚钱.a你可以在Eclipse基础上发布功能完备的产品,3也可以发售针对现有产品的扩展插件.a3a3c3ac333c333a3a3
075Eclipse非常强大——不论从个人角度.c专业角度还是社会角度来说都是如此.a但是,4要加入贡献者的圈子,4你必须首先掌握大量的知识.a我们希望本书能帮助你跨过这道门槛,4开始为Eclipse作出贡献的旅程.a4a4c4ac444c444a4a4
076对于那些喜欢为别人编写开发工具的人来说,5Eclipse既带来了好消息,5也带来了坏消息.a好消息是:Eclipse强大得令人难以置信,5而且它的内部开发者都遵循创建EclipsecJava开发工具(JDT)时制订的那些准则,5这使得它的结构清晰而优美.a坏消息则是:Eclipse拥有一套完整的世界观,5如果你希望在Eclipse的沙箱里玩得开心,5就必须首先牢记它的准则.a5a5c5ac555c555a5a5
077打个不恰当的比方,6初涉Eclipse的感觉多少有点像孤身一人在曼谷上空跳伞(这个比喻不适用于泰国程序员).a平安着陆之后,6你需要食物和住所,6但如何去得到呢?你应该如何利用身边的资源满足自己迫切的需要?6a6c6ac666c666a6a6
078帮助你克服这种迷失感正是本书的首要目标.a如果你和一名向导一起降落在曼谷,7你就可以对他说:“我饿了.a”而他会告诉你:“你可以在某地吃顿饭.a”同样,7如果你说:“我想实现这样一个功能.a”本书会告诉你:“这应该是一个视角,7那应该是一个ObjectcContribution,7而那个功能则需要一个新的编辑器.a”7a7c7ac777c777a7a7
079即便读完本书,8你还是无法获得Eclipse世界的完整地图,8但对于任何基本的问题,8你至少会知道一条解决的途径.a你还会了解到一些准则,8只有遵守它们,8你才能和别人友好相处.a这就好像我们为你画出一幅曼谷地图,8在上面标出六条大街.c一家饭店和一家宾馆.a你无法从这张图上了解曼谷的一切,8但靠着它已经足以在这个城市生存下来,8足以开始了解更多的东西.a8a8c8ac888c888a8a8
0710在学习Eclipse的过程中,9你花在阅读代码上的时间会比编写代码多得多.a你必须习惯于一天用六个小时读代码,9再用一个小时写代码——你会发现这样的一天效率同样高得惊人.a在习惯了Eclipse的文化之后,9你会自然而然地“知道”如何解决越来越多的问题,9但你同样会经常照搬其他方案的结构来解决类似的问题——可能是模仿Eclipse的结构,9也可能是模仿你自己以前的解决方案.a9a9c9ac999c999a9a9
0711当我们与你一道走进书中的范例时,10我们不会装出一副无所不知的圣贤模样——实际上,10我们也记不住所有的细节.a不过,10我们会告诉你如何找到可供模仿的结构.a学会充分利用Eclipse的搜索工具,10这也是成为Eclipse贡献者所必需的一项技能.a10a10c10ac101010c101010a10a10
0712本书不是为想要学习使用Eclipse的初学者准备的,11我们希望读者至少熟悉Eclipse的常用术语——视图.c编辑器,11凡此种种.a使用Eclipse一段时间之后,11你很可能产生对它进行扩展的想法,11那时这本书就该派上用场了.a11a11c11ac111111c111111a11a11
0713在筹备这本书时,12我们发现可以讲的概念数不胜数.a可是,12如果我们把Eclipse所有的2000个知识点都写进去,12恐怕就再也没人愿意看这本书了.a为了留住你的目光,12我们决定只介绍其中的50个知识点——对于刚迈进这个世界的你来说,12这应该是最重要的50件事.a在很多章节的最后,12你可以找到我们为你准备的“前行的路标”.a你可以跟随它的指引在代码中找到书中概念的延伸.a实际上,12在向别人传授Eclipse知识时,12我们最常用的办法就是:“不妨去看看org.eclipse.core.runtime的源代码”.a12a12c12ac121212c121212a12a12
0714有这么一个故事:有个博士生马上要进行答辩,13答辩的主题是“果实”.a可是时间已经太紧迫了,13他只来得及去了解黄瓜这一种果实.a答辩开始了,13第一个问题是:“请谈谈你对西红柿的了解.a”“你看,13”他说道,13“西红柿是一种果实——跟黄瓜一样.a黄瓜含有80%的水分,13它的表皮能抵挡病虫害,13可以用黄瓜来做沙拉.a”就这样,13尽管他不了解别的果实,13但他成功地把每个问题都扯到了黄瓜上面.a13a13c13ac131313c131313a13a13
0715我们也了解黄瓜.a除了Eclipse之外,14我们还有两条“黄瓜”:模式和JUnit.a所以,14贯穿这本书的始终,14你会不断发现类似于模式的建议——实际上,14一开始写这本书的时候,14我们总觉得有点不舒服,14直到我们开始写下一些“法则”,c有了“法则”的概念之后,14我们的写作就进展得顺利多了.a说到底,14这些法则其实就是微型的模式.a14a14c14ac141414c141414a14a14
0716JUnit——我们的第二条“黄瓜”——则是运行所有示例的基础.a1997年,15在去亚特兰大的飞机上,15我们俩花了几个小时开发出了JUnit的第一个版本.a从那以后,15我们的整个技术生活几乎都围绕着它.a对于本书中的示例代码,15JUnit是一个最理想的运行环境:你可以非常方便地运行所有测试,15并一目了然地看到结果.a15a15c15ac151515c151515a15a15
0717但是,16我们必须给你一个忠告:如果你已经听厌了模式和JUnit,16也许这本书并不适合你.a16a16c16ac161616c161616a16a16
0718格式约定17a17c17ac171717c171717a17a17
0719本书将使用如下的格式约定:18a18c18ac181818c181818a18a18
0720粗体——用于表示用户界面元素,19例如菜单.c按钮.c标签.c文本框等.a19a19c19ac191919c191919a19a19
0721斜体c——用于表示文件名和URL.a另外,20新出现的术语也用斜体字强调.a20a20c20ac202020c202020a20a20
0722Courierc——用于所有示例代码及正文中引用的代码元素.a插件名称和XML文件中的元素也用这种字体表示.a21a21c21ac212121c212121a21a21
0723Courier加粗——用于强调示例代码中的某一部分,22特别是插入或修改的代码.a22a22c22ac222222c222222a22a22
0724Courier加删除线——用于指出示例代码中应当删掉的部分.a23a23c23ac232323c232323a23a23
0725在第二篇和第三篇的示例中,24我们用下列图标表示当前的动作:24a24c24ac242424c242424a24a24
0726cc搜索——表示我们正在搜索.c查看Eclipse的代码.a25a25c25ac252525c252525a25a25
0727ccc模仿——表示我们正在展示出自Eclipse的代码或XML标记.a26a26c26ac262626c262626a26a26
0728cc测试——表示我们正在展示出自JUnit测试用例的代码.a27a27c27ac272727c272727a27a27
0729在线范例28a28c28ac282828c282828a28a28
0730本书的网站是www.awprofessional.com/titles/0321205758,29在那里可以下载本书所有的示例源码.a此外,29该网站还提供一份纠错清单,29以及其他与本书相关的消息.a29a29c29ac292929c292929a29a29
0731如果要使用这些示例代码,30你必须首先安装EclipsecSDK(2.1.1版).a请访问www.eclipse.org/downloads/,30在那里可以找到适合你的操作系统平台的EclipsecSDK.a30a30c30ac303030c303030a30a30
0732致谢31a31c31ac313131c313131a31a31
0733在撰写本书的过程中,32我们从一个巨大的审阅者群体那里得到了大量热情洋溢而又无微不至的支持——只有很少的意见让我们不快.a每当采纳了审阅者的建议时,32我们总是尽量记住把那个人的名字加入下面的名单中.a如果恰好漏掉了你的名字,32请提醒我们,32我们会在下一次印刷时加上.a我们记得的审阅者有:FrankcSauer.cJancSchulz.cDavecW.cBobcFoster.cBinyan.cJeffcDuska.cTomcAyerst.cRichardcKuo.cWiriantocDjunaidi.cDoncEstberg.cAndreascGuther.ccVincentcMassol.cJohncPickler.cThecSiliconcValleycPatternscGroup.cRusscRufer.cTracycBialik.cJohncBrewer.cJerrycLewis.cJeffcMiller.cPatrickcManion.cCarolcThistlethwaite.cPei-weicWu.cChriscLopez.cKencHejmanowski.cWaltercVannini.cAzadcBolour.cThomascRoche.cPhilcGoodwin.cCarstencHeyl.cEdcBurnette.cJoecBowbeer.cDavidcLoeffler.cJimcSawyer.cAlexcBlewitt.cLaurentcBendel.cTomcKilla.cBillcSchauweker.cJancPloski.cJancLooney.cRichcSmith.cAndycFarley.cDebbiecUtley.cIvancMoore.cGeoffcGibbs.cMarkcBarkan.cFloriancHawlitzek.cStevecBlass.cMayureshcKadu.cRicardocLecheta.cStefancBaramov.cArnecH?nle.cPetercFriese.cRandycGordon.cFrankcSauer.cAndycYang.cEriccPieters.cTobiascWidmer.cBernardcGaffney.cJamescHowe.cMattcDickie.cLeecR.cNackman和WimcEngels.a32a32c32ac323232c323232a32a32
0734JoelcRosi-Schwartz和BettycRosi-Schwartz还审阅了我们的手稿,33BardcBloom及时指出了我们在“第零循环”中留下的一些漏洞,33在此向他们表示感谢.a如果本书中还有其他错误,33责任全在我们二人.a33a33c33ac333333c333333a33a33
0735我们要特别感谢Eclipse.org的提交者(committer)们,34他们给了我们及时而详尽的技术反馈.aAndrécWeinand.cDirkcB?umer.cJohncWiegand和Kai-UwecM?tzel不止一次地对我们的书稿提供深入的反馈,34JimcdescRivières.cNickcEdgar.cPhilippecMulet和StevecNorthover专门审阅了“第三循环”的各章节,34DanielcMegert和Martinc?schlimann对全书的源码和文字做了详细检查,34也向他们表示感谢.a34a34c34ac343434c343434a34a34
0736MikecHendrickson和EriccEvans为我们提供了及时的技术帮助.a35a35c35ac353535c353535a35a35
0737Kent在此要特别感谢Erich,36本书能够得以付梓,36Erich当居首功.a我无比珍视我们之间的专业关系.a36a36c36ac363636c363636a36a36
0738我们要感谢CindeecAndres,37她不辞辛劳的工作大大提升了我们文字的质量.a我们还要感谢Jo?llecAndres-Beck,37她一直关注着本书的写作,37找出了“前行的路标”中的不少问题.a37a37c37ac373737c373737a37a37
0739最后,38我们要感谢我们的出版团队——LyndacD'Arcangelo.cTyrrellcAlbaugh和JohncFuller.aMikecHendrickson鼓励我们开始撰写本书,38我们的编辑JohncWait和JohncNeidhart总在最需要的时候给我们支持,38ChriscGuzikowski领军的市场团队及时而准确地将本书的信息传达给购书人,38向他们致以诚挚的谢意.a38a38c38ac383838c383838a38a38
前 言
072每个人都需要别人的关怀和帮助,1每个人也同样需要关怀和帮助别人.a作为一名程序员翱翔在Eclipse的天空能够同时满足这两方面的需要,1所以才会有那么多人乐此而不疲.a当然,1这里也有那些常见的宣传词,1例如“提高生产力”.c“紧跟市场”.c“占据技术优势”——对于那些在其中工作的人,1Eclipse是一个能够大幅提高生产力的环境,1人们为Eclipse作出的贡献使它更臻完美,c如果找到了合适的插件,1产品上市的时间将大大提前,1你将获得巨大的技术优势.a但是,1尽管这些都是事实,1但它们都不是重点,1它们都不足以解释:为何开发者们如此钟爱Eclipse.a1a1c1ac111c111a1a1
073我们喜欢在Eclipse环境中工作,2是因为它给了我们无微不至的关怀:每当遇到编程问题时,2总会有一项Eclipse功能帮助我们解决它.a我们喜欢为Eclipse作出贡献,2是因为做这件事给了我们助人的快乐——既是帮助自己,2更是帮助别人.a如果我们作出的贡献还为别人留下了发展的空间,2使他们能够在此之上作出更多的贡献,2一个正反馈循环就出现了,2每个人都会在其中获得快乐.a2a2c2ac222c222a2a2
074“为Eclipse作贡献”甚至还可能成为一个精彩的商业计划——“贡献”并不表示你不能用你的成果赚钱.a你可以在Eclipse基础上发布功能完备的产品,3也可以发售针对现有产品的扩展插件.a3a3c3ac333c333a3a3
075Eclipse非常强大——不论从个人角度.c专业角度还是社会角度来说都是如此.a但是,4要加入贡献者的圈子,4你必须首先掌握大量的知识.a我们希望本书能帮助你跨过这道门槛,4开始为Eclipse作出贡献的旅程.a4a4c4ac444c444a4a4
076对于那些喜欢为别人编写开发工具的人来说,5Eclipse既带来了好消息,5也带来了坏消息.a好消息是:Eclipse强大得令人难以置信,5而且它的内部开发者都遵循创建EclipsecJava开发工具(JDT)时制订的那些准则,5这使得它的结构清晰而优美.a坏消息则是:Eclipse拥有一套完整的世界观,5如果你希望在Eclipse的沙箱里玩得开心,5就必须首先牢记它的准则.a5a5c5ac555c555a5a5
077打个不恰当的比方,6初涉Eclipse的感觉多少有点像孤身一人在曼谷上空跳伞(这个比喻不适用于泰国程序员).a平安着陆之后,6你需要食物和住所,6但如何去得到呢?你应该如何利用身边的资源满足自己迫切的需要?6a6c6ac666c666a6a6
078帮助你克服这种迷失感正是本书的首要目标.a如果你和一名向导一起降落在曼谷,7你就可以对他说:“我饿了.a”而他会告诉你:“你可以在某地吃顿饭.a”同样,7如果你说:“我想实现这样一个功能.a”本书会告诉你:“这应该是一个视角,7那应该是一个ObjectcContribution,7而那个功能则需要一个新的编辑器.a”7a7c7ac777c777a7a7
079即便读完本书,8你还是无法获得Eclipse世界的完整地图,8但对于任何基本的问题,8你至少会知道一条解决的途径.a你还会了解到一些准则,8只有遵守它们,8你才能和别人友好相处.a这就好像我们为你画出一幅曼谷地图,8在上面标出六条大街.c一家饭店和一家宾馆.a你无法从这张图上了解曼谷的一切,8但靠着它已经足以在这个城市生存下来,8足以开始了解更多的东西.a8a8c8ac888c888a8a8
0710在学习Eclipse的过程中,9你花在阅读代码上的时间会比编写代码多得多.a你必须习惯于一天用六个小时读代码,9再用一个小时写代码——你会发现这样的一天效率同样高得惊人.a在习惯了Eclipse的文化之后,9你会自然而然地“知道”如何解决越来越多的问题,9但你同样会经常照搬其他方案的结构来解决类似的问题——可能是模仿Eclipse的结构,9也可能是模仿你自己以前的解决方案.a9a9c9ac999c999a9a9
0711当我们与你一道走进书中的范例时,10我们不会装出一副无所不知的圣贤模样——实际上,10我们也记不住所有的细节.a不过,10我们会告诉你如何找到可供模仿的结构.a学会充分利用Eclipse的搜索工具,10这也是成为Eclipse贡献者所必需的一项技能.a10a10c10ac101010c101010a10a10
0712本书不是为想要学习使用Eclipse的初学者准备的,11我们希望读者至少熟悉Eclipse的常用术语——视图.c编辑器,11凡此种种.a使用Eclipse一段时间之后,11你很可能产生对它进行扩展的想法,11那时这本书就该派上用场了.a11a11c11ac111111c111111a11a11
0713在筹备这本书时,12我们发现可以讲的概念数不胜数.a可是,12如果我们把Eclipse所有的2000个知识点都写进去,12恐怕就再也没人愿意看这本书了.a为了留住你的目光,12我们决定只介绍其中的50个知识点——对于刚迈进这个世界的你来说,12这应该是最重要的50件事.a在很多章节的最后,12你可以找到我们为你准备的“前行的路标”.a你可以跟随它的指引在代码中找到书中概念的延伸.a实际上,12在向别人传授Eclipse知识时,12我们最常用的办法就是:“不妨去看看org.eclipse.core.runtime的源代码”.a12a12c12ac121212c121212a12a12
0714有这么一个故事:有个博士生马上要进行答辩,13答辩的主题是“果实”.a可是时间已经太紧迫了,13他只来得及去了解黄瓜这一种果实.a答辩开始了,13第一个问题是:“请谈谈你对西红柿的了解.a”“你看,13”他说道,13“西红柿是一种果实——跟黄瓜一样.a黄瓜含有80%的水分,13它的表皮能抵挡病虫害,13可以用黄瓜来做沙拉.a”就这样,13尽管他不了解别的果实,13但他成功地把每个问题都扯到了黄瓜上面.a13a13c13ac131313c131313a13a13
0715我们也了解黄瓜.a除了Eclipse之外,14我们还有两条“黄瓜”:模式和JUnit.a所以,14贯穿这本书的始终,14你会不断发现类似于模式的建议——实际上,14一开始写这本书的时候,14我们总觉得有点不舒服,14直到我们开始写下一些“法则”,c有了“法则”的概念之后,14我们的写作就进展得顺利多了.a说到底,14这些法则其实就是微型的模式.a14a14c14ac141414c141414a14a14
0716JUnit——我们的第二条“黄瓜”——则是运行所有示例的基础.a1997年,15在去亚特兰大的飞机上,15我们俩花了几个小时开发出了JUnit的第一个版本.a从那以后,15我们的整个技术生活几乎都围绕着它.a对于本书中的示例代码,15JUnit是一个最理想的运行环境:你可以非常方便地运行所有测试,15并一目了然地看到结果.a15a15c15ac151515c151515a15a15
0717但是,16我们必须给你一个忠告:如果你已经听厌了模式和JUnit,16也许这本书并不适合你.a16a16c16ac161616c161616a16a16
0718格式约定17a17c17ac171717c171717a17a17
0719本书将使用如下的格式约定:18a18c18ac181818c181818a18a18
0720粗体——用于表示用户界面元素,19例如菜单.c按钮.c标签.c文本框等.a19a19c19ac191919c191919a19a19
0721斜体c——用于表示文件名和URL.a另外,20新出现的术语也用斜体字强调.a20a20c20ac202020c202020a20a20
0722Courierc——用于所有示例代码及正文中引用的代码元素.a插件名称和XML文件中的元素也用这种字体表示.a21a21c21ac212121c212121a21a21
0723Courier加粗——用于强调示例代码中的某一部分,22特别是插入或修改的代码.a22a22c22ac222222c222222a22a22
0724Courier加删除线——用于指出示例代码中应当删掉的部分.a23a23c23ac232323c232323a23a23
0725在第二篇和第三篇的示例中,24我们用下列图标表示当前的动作:24a24c24ac242424c242424a24a24
0726cc搜索——表示我们正在搜索.c查看Eclipse的代码.a25a25c25ac252525c252525a25a25
0727ccc模仿——表示我们正在展示出自Eclipse的代码或XML标记.a26a26c26ac262626c262626a26a26
0728cc测试——表示我们正在展示出自JUnit测试用例的代码.a27a27c27ac272727c272727a27a27
0729在线范例28a28c28ac282828c282828a28a28
0730本书的网站是www.awprofessional.com/titles/0321205758,29在那里可以下载本书所有的示例源码.a此外,29该网站还提供一份纠错清单,29以及其他与本书相关的消息.a29a29c29ac292929c292929a29a29
0731如果要使用这些示例代码,30你必须首先安装EclipsecSDK(2.1.1版).a请访问www.eclipse.org/downloads/,30在那里可以找到适合你的操作系统平台的EclipsecSDK.a30a30c30ac303030c303030a30a30
0732致谢31a31c31ac313131c313131a31a31
0733在撰写本书的过程中,32我们从一个巨大的审阅者群体那里得到了大量热情洋溢而又无微不至的支持——只有很少的意见让我们不快.a每当采纳了审阅者的建议时,32我们总是尽量记住把那个人的名字加入下面的名单中.a如果恰好漏掉了你的名字,32请提醒我们,32我们会在下一次印刷时加上.a我们记得的审阅者有:FrankcSauer.cJancSchulz.cDavecW.cBobcFoster.cBinyan.cJeffcDuska.cTomcAyerst.cRichardcKuo.cWiriantocDjunaidi.cDoncEstberg.cAndreascGuther.ccVincentcMassol.cJohncPickler.cThecSiliconcValleycPatternscGroup.cRusscRufer.cTracycBialik.cJohncBrewer.cJerrycLewis.cJeffcMiller.cPatrickcManion.cCarolcThistlethwaite.cPei-weicWu.cChriscLopez.cKencHejmanowski.cWaltercVannini.cAzadcBolour.cThomascRoche.cPhilcGoodwin.cCarstencHeyl.cEdcBurnette.cJoecBowbeer.cDavidcLoeffler.cJimcSawyer.cAlexcBlewitt.cLaurentcBendel.cTomcKilla.cBillcSchauweker.cJancPloski.cJancLooney.cRichcSmith.cAndycFarley.cDebbiecUtley.cIvancMoore.cGeoffcGibbs.cMarkcBarkan.cFloriancHawlitzek.cStevecBlass.cMayureshcKadu.cRicardocLecheta.cStefancBaramov.cArnecH?nle.cPetercFriese.cRandycGordon.cFrankcSauer.cAndycYang.cEriccPieters.cTobiascWidmer.cBernardcGaffney.cJamescHowe.cMattcDickie.cLeecR.cNackman和WimcEngels.a32a32c32ac323232c323232a32a32
0734JoelcRosi-Schwartz和BettycRosi-Schwartz还审阅了我们的手稿,33BardcBloom及时指出了我们在“第零循环”中留下的一些漏洞,33在此向他们表示感谢.a如果本书中还有其他错误,33责任全在我们二人.a33a33c33ac333333c333333a33a33
0735我们要特别感谢Eclipse.org的提交者(committer)们,34他们给了我们及时而详尽的技术反馈.aAndrécWeinand.cDirkcB?umer.cJohncWiegand和Kai-UwecM?tzel不止一次地对我们的书稿提供深入的反馈,34JimcdescRivières.cNickcEdgar.cPhilippecMulet和StevecNorthover专门审阅了“第三循环”的各章节,34DanielcMegert和Martinc?schlimann对全书的源码和文字做了详细检查,34也向他们表示感谢.a34a34c34ac343434c343434a34a34
0736MikecHendrickson和EriccEvans为我们提供了及时的技术帮助.a35a35c35ac353535c353535a35a35
0737Kent在此要特别感谢Erich,36本书能够得以付梓,36Erich当居首功.a我无比珍视我们之间的专业关系.a36a36c36ac363636c363636a36a36
0738我们要感谢CindeecAndres,37她不辞辛劳的工作大大提升了我们文字的质量.a我们还要感谢Jo?llecAndres-Beck,37她一直关注着本书的写作,37找出了“前行的路标”中的不少问题.a37a37c37ac373737c373737a37a37
0739最后,38我们要感谢我们的出版团队——LyndacD'Arcangelo.cTyrrellcAlbaugh和JohncFuller.aMikecHendrickson鼓励我们开始撰写本书,38我们的编辑JohncWait和JohncNeidhart总在最需要的时候给我们支持,38ChriscGuzikowski领军的市场团队及时而准确地将本书的信息传达给购书人,38向他们致以诚挚的谢意.a38a38c38ac383838c383838a38a38
===========================================================