?本文的前半部?/a> 中,我解释了(jin) Mylyn 的Q务管理功能如何轻村֜聚焦与给定工作日或工作周相关的Q务。一旦Q务成为?zhn)?Eclipse 体验中的集成部分Q?zhn)很可能?x)注意到许多重复性行为都是以所处理的Q务的上下?/em> Z?j)的。多d处理是当今知识工作中很普遍的一部分Q它常常需要创建和重新创徏与当前Q务相关的上下文。Q务的上下文是指在处理d旉要引用的所有文件、搜索结果和其它相关信息。例如,在编E时Q可能只想看C正在修复?bug 相关?Java™ 元素。当完成修复Ӟ(zhn)可能希望以独立于当天处理的其它d的方式提交这些更攏V或者,希望通过只运行与对Q务作出的更改相关的测试来节省旉?/p>
管 Mylar l常被称作灵巧的用户界面Q但它本wƈ没有M灵y之处Q它只不q是利用?jin)(zhn)的智慧。Mylyn 通过利用q样一个事实做到这点:(x)与每个Q务涉?qing)的l节相比Q组成工作的各个部分Q即(zhn)所处理的Q务)(j)更加Ҏ(gu)(g)索。它以一U可预测的方式自动捕捉?zhn)所处理的所有细节,使?zhn)无需再经历重新检索或重新查找的繁琐过E。Mylar 上下文是(zhn)同pȝ元素?qing)关p进行交互的一U可预测的投影,它ƈ没有使用难于预测和理解的知识型模型。这U模型十分灵z,正逐渐被扩展到q泛的知识工作工具中。请参阅 参考资?/a> 节Q了(jin)解更多关?Mylyn 内部原理和架构的信息Q以?qing)?f)目扩展 Mylyn 的更多细节?/p>
正如 Mylyn 可以帮助(zhn)聚焦工作周所包含的Q务一P它可以 Eclipse 工作焦与当前d相关的工件上。安?Mylyn ?Task-Focused UI 之后Q只需指出zd的Q务,(zhn)所使用的所有文仉自动添加到该Q务的上下文中。管理上下文是ؓ(f)?jin)精地表示出对所从事的各U工件的聚焦E度Q即使对长期q行的Q务也是如此。当切换dӞ上下文将被保存,q(zhn)可以通过一ơ单击进行多d处理Qƈ且轻村֜与其他h׃n特定于Q务的知识?/p>
本文解释?Mylar 如何无缝地将其置?Eclipse UI 之上来凸现编EQ务的上下文。本文首先解?Mylyn 理上下文的机制Q然后介l兴修饰、视图过滤、编辑器理和上下文驱动的单元测试套件等 UI 工具。在文章的最后,展示?jin)如何综合运?Mylar 的Q务管理和上下文管理来协助团队协作?/p>
?1 中的~号区域昄?Mylyn 的一些上下文理功能Q?/p>
单击 q里 查看全图?/p>
设想一下,假设(zhn)正在将更改装到新功能里,来应对迫q的代码ȝ期限。在工作中,创徏此功能时Q构Z(jin)关于所有修改过的类和方法以?qing)所有访问过?API 的颇有h(hun)值的知识。由于在使用 MylarQ这个知识会(x)自动地在d上下文中获取到。Q务要完成Ӟ却出C(jin)一个严重的 bugQ需要立即给予注意?/p>
(zhn)通过单击Ȁz?bug 报告Qƈ开始调查该问题。在 Mylar 的富d~辑器中览?bug 加了(jin)链接的堆栈跟踪Q新的Q务上下文被探查和诊断l果所填充。当单击 Mylyn 的自动化 Context Test SuiteQ该套gq行与已创徏的Q务上下文l构相关的单元测试)(j)Ӟ(zhn)发现这?bug 位于一个同事的代码中,而不在?zhn)的代码中。由?Mylyn 提供?jin)对d的修改历史的链接Q?zhn)可以立即查看该同事的dQ它对应于出现问题的更改。通过再一ơ单击,该 bug 再分配给同事q共享由(zhn)的诊断得出的Q务上下文。完成这些都未离开 EclipseQ所以通过单击 Task List ?Back 按钮可以立即回到之前d的上下文。同Ӟ(zhn)的同事也恰在?zhn)停止的地?gu)赯 bug 报告。这只是E序员?Task-Focused UI L工作和协作的场景之一?/p>
cM于需要?em>q接?/em> 与Q务储存库集成QMylyn 使用桥接器(bridgeQ?/em>它的上下文模型与特定于域的工具集成。Mylyn 附带?jin)用?Eclipse SDK 的一l核?j)的桥接器,其中包括?Java 代码、JUnit、Plug-in Development Environment (PDE)、Ant 和纯文本文g的支持。ؓ(f)?jin)获得完全集成的体验QMylyn 需要一个用于所有要使用的工具和语言Q例?Ruby ?JSPQ的桥接器。如果缺特定于(zhn)所使用的编E语a或其它文件类型的桥接器,Mylyn 仍然?x)提供文件别的聚焦Q但是不能监视?zhn)与文件内部结构的交互Q例如编辑特定的声明Q。这意味着?Package Explorer 中只能看到感兴趣的文Ӟ但是不能执行l粒度的声明qo(h)Q例如在 Outline 视图中)(j)以及(qing)在编辑器中自动折叠声明,也不具备诸如d Context Test Suites {高U特性?/p>
Z(jin)提供 自动化更攚w理QMylyn q需要对版本控制集成q行某种扩展。Mylyn 附带?jin)?CVS 的支持,但是?Subversion {其它版本控制系l的支持则需要单独安装。请查看 参考资?/a> 中的 Mylyn Extensions 清单Q下载用?Mylyn 的额外的桥接器和版本控制集成?/p>
接下来的节展示如何利用 Mylyn 的上下文理功能以Q务ؓ(f)中心(j)的方式工作。虽然这里的例子Z Java 开发,但其中的概念和大多数Ҏ(gu)同样适用于可能用的MZ文g的工件。(请参?支持的工?/a>Q了(jin)解更多细节。)(j) Mylyn 中的d上下文管理基于这L(fng)思想Q开发h员与pȝ的交互可以{换ؓ(f)一?em>兴趣{Qdegree-of-interestQ模?/em>Q在该模型中Q系l中的每个元素都Ҏ(gu)其与手头d的兴等U来衡量其权重。这U相兛_加权形成?jin)与d相关的所有元素的上下文。然后,可以通过H出最重要的元素、过滤无关紧要的元素以及(qing)允许在感兴趣的元素上执行操作Q例如,只提交相x改)(j)来d上下文聚焦于 UI。Q务上下文是在(zhn)工作时以一U可预测的方式构建的Q当(zhn)激zM个Q务时Q?zhn)选择或编辑的每个元素 —?例如文g?Java Ҏ(gu) —?成ZQ务上下文的一部分。和元素交互多Q该元素相对于Q务的兴趣{p高。如果一个元素的兴趣U别_高,那么它就成ؓ(f)一?em>里程(landmarkQ?/em>Q这是一个隐式创建的书签。每一ơ交互也Dl成d的所有元素已U篏的兴逐渐衰减Q这样兴元素的集合׃(x)同当前的兴趣相匹配,而不?x)无限制的扩张下厅R? 使Q务上下文模型单易用的关键特征是它h可预性ƈ且一目了(jin)?dng)?x)(zhn)期望看到的内容显C在眼前Q每当?zhn)开始处理一个元素时Q就立即可以看到该元素填充了(jin)上下文。还可以直接操纵元素的兴等U,或者元素变得不相养I或者显式地元素标Cؓ(f)里程。换句话_(d)(zhn)已l熟(zhn)的 bookmark/starring/tagging UI 没有M损失。但是,一旦?zhn)习(fn)惯使?MylynQ?zhn)很可能?x)发现自己寚w些手动管理Q务上下文的机制的依赖性大大减?/p>
Mylyn 的上下文理功能使用传统?Eclipse 视图以一U新的方式来凸现信息。?zhn)只需通过一ơ单?yn)LzMQ务,可以 Eclipse UI 聚焦于那个Q务。然后,(zhn)与之交互的每个元素都成ZQ务上下文的一部分。Mylar 兴趣修饰器随后用字体着色来高亮昄每个元素从交互中U篏的兴等U。非兴趣元素以灰色显C,兴趣元素以黑色显C,里程ؓ(f)_体?/p>
管只高亮显C在减少信息q蝲斚w有其局限性,但它q是一直应用于所有能看到诸如 Java 成员和文件等元素的视图中。这便于(zhn)在查看一长串的元素时快速挑选Q务上下文中的元素。例如,当查看搜索结果时Q可以立卛_现最感兴的元素Q因为它们以_体修饰为里E碑形式Q参??2Q?/p>
仅仅使用修饰q不以减少包含几十万个文g的大型工作区中的信息蝲。一些结构化视图Q例?Eclipse ?Project ExplorerQ在览大型层次l构内容斚w已变得o(h)人难以置信的高效。超载问题与那些视图无关Q而应该归因于开发h员用的巨大的信息系lƈ不匹配与Ml定~程d相关的相对较?yu)的信息。对于这U不匚wQ最明显的表现是Q大量时间浪费在反复滚动以及(qing)展开/折叠庞大的树(wi)视图以查扑֮成工作所需的信息?/p>
Z(jin)减少需要关闭聚焦模式的ơ数QMylyn 提供?Alt+Click 机制Q(zhn)可以在?wi)视图中暂时不过滤一个节点的子节炏V例如,Z(jin)选择一个不可见的方法,可以按住 Alt 键ƈ单击c,q择那个Ҏ(gu)Q以便将它添加到d上下文中。如果在视图中的I白处按?Alt q单击鼠标,则会(x)昄所有的根节点(例如目Q。如果l按?Alt 键,可以快速地从一个项目节点导航到感兴的Ҏ(gu)?/p>
Mylyn 的目标是消除所有不需要的滚动和单?yn)L作。ؓ(f)此, Task-Focused UI 提供Z兴趣的过滤和l构化视囄理。通过 Focus on Active Task 按钮ȀzdQ这些功能可以过滤掉所有不感兴的元素Q从而将相应的视图聚焦于zdd的上下文。例如,聚焦模式保 Package Explorer 只显C?zhn)正在处理的内容?x)属于d的一部分的所有源文g、库文g和方法。除?jin)过滤外Q当应用聚焦ӞMylyn q自动维护树(wi)视图的展开状态,所以?zhn)不需要手动地展开和折叠树(wi)节点p看到感兴的元素?/p>
开始在视图上用聚焦模式后Q?zhn)注意到兴趣模型如何随着工作而演q。一个元素的被选中ơ数多Q元素的兴趣{p高,直到它变为粗体的里程。低兴趣的元素(如只选过一ơ的搜烦(ch)命中l果Q将在兴等U中衰减q从qo(h)q的视图中消失,q确保该视图不会(x)被非兴趣元素所胀满。由于Q务上下文在一U可预见的模式下被积极地理Q上下文只包括了(jin)有兴等U的元素Q即使在长期q行的Q务中也是如此。尽设?Mylar 的Q务上下文模型是ؓ(f)?jin)能够一直反映当前与d相关的东西,但也可以手动地增加或减少元素的兴等U(例如Q通过使用元素的上下文菜单行ؓ(f)或用快捷键 Ctrl+Alt+Shift+ 向上/向下的箭_(d)(j)?/p>
在深入探?Mylyn 提供的用于支?Java 开发的高集成之前Q?zhn)需要大体了(jin)解在处理U文本文件时QTask-Focused UI ?Eclipse 工作区的关键贡献。图 2 演示?jin)这些关键概念?x) 本文后面的内容以 Java 开发ؓ(f)例,较详l地阐述如何以以dZ?j)的方式工作。但是,dȀzR视图聚焦和~辑器管理等概念是?Mylyn 的最值得注意的关键方面。?zhn)只需理解dȀzȝ概念Q就可以开始用以dZ?j)的方式工作。这U小但重要的工作方式的改变会(x)立即使?zhn)L(fng)Q当(zhn)切换Q务时Q?zhn)在工作中建立h的所有有价值的上下文不再会(x)丢失?/p>
默认情况下大多数 Task-Focused UI Ҏ(gu)都是打开的,但是可以通过视图或编辑器中相应的按钮或者偏好设|关闭它们。要?jin)解更详l的信息Q请参阅 Mylyn FAQ Q见 参考资?/a>Q?/p>
?Mylyn 用于 Java ~程的开发h员常怋 Package Explorer 处于聚焦模式。因此,默认情况下,当激zM个Q务时Q?strong>Focus on Active Task 按钮自动打开Q当一个Q务变ZzdӞ该按钮自动关闭。当该功能打开Ӟ只能看到上下文中?Java 元素。当选择一?Java cLQ不是通过览q是通过常用?Open Type 机制QCtrl+Shift+TQ,q种cd成Z下文的一部分Qƈ昄在过滤后?Package Explorer 中。?zhn)选择和编辑的每个Ҏ(gu)都被dCQ务上下文中,因此?x)显C在 Package Explorer 中。图 3 昄聚焦模式下的 Package Explorer。注?Package Explorer ?Debug 视图?Java 元素的基于兴的修饰和活动过滤?/p>
当视囑֜聚焦模式ӞEclipse 用于打开元素的工兯行良好(使用 Ctrl+Shift+T 打开一个类型,使用 Ctrl+Shift+R 打开一资源,Ctrl+O 用于地打开大纲QCtrl+T 用于地打开层次l构Q。ؓ(f)使在 Open Type 对话框中选择cd更加单,感兴的cd被自动放在列表的最上面。当切换dӞ列表中包含新d感兴的cd。当没有zddӞ该列表恢复ؓ(f)最q用类型的 Eclipse 全局列表?/p>
如果使用 Java Browsing 透视图,请用窗口的工具栏按钮,通过单击三U?Java 元素视图设ؓ(f)聚焦模式Q而不必逐个聚焦每个视图?/p>
如果使用没有可见D视图的透视图(例如 Debug 视图Q,或者将~辑器区域最大化Q那么仍然可以从 Navigate > Quick Context ViewQ快捷键?Ctrl+Shift+Alt+右箭_(d)(j)D上下文。和 Quick Outline (Ctrl+O) {其它快速视图一Pq种弹出视图的优Ҏ(gu)允许(zhn)输入,以导航到感兴的文g或元素?/p>
Eclipse 成熟?Java ~辑器(zhn)可以在~辑器中处理大多数结构导航。此外,Mylyn q提供了(jin)自动折叠和内容辅助排序,以帮?Java ~辑器聚焦与当前d相关的元素。如果打开H口工具栏中 Mylyn ?Automatically Fold Uninteresting Elements 按钮Q那么在~辑器中只有感兴的元素被展开。这可以增加~辑器的信息密度Qƈ且更易于D大型文g中的声明Q而不必打开 Outline 视图。当选择一个元素时Q它立即成ؓ(f)d上下文的一部分Qƈ且被展开。注意,在图 4 中,大多数元素都是折叠的Q因为它们没有被选择或编辑过Q同Ӟzd元素是打开的,左边的编辑器装订U提C它是一个里E碑Q?/p>
与视图中的过滤相|Mylyn q根据兴等U对 Java 内容辅助q行排序。在兴趣分隔W下的所有条目都使用 Java Development Tools 的标准排序试探法q行排序。这意味着Q只需按几ơ向下箭头键可以选择感兴的。如果在选择前开始输入,该列表会(x)恢复为典型排序。还应注意到Q在?4 中,诸如 Mylar 也用Q务上下文来动态地理和Q务相关的打开~辑器的数目。当文g中的元素从兴等U中衰减Q该~辑器会(x)自动关闭。当停用一个Q务时Q它所有的~辑器都?x)关闭,dȀzL重新打开。减元素的兴趣{?x)关闭其~辑器,且反之亦?dng)关闭一个文件也?x)减其兴趣{。这可能需要一Ҏ(gu)间才能适应Q但是这意味着(zhn)不再需要自q理打开的编辑器的状态,q且打开的编辑器的数量也不至于太多。确保所有打开的编辑器与感兴趣的元素相对应Q这q(zhn)可以?Eclipse 的编辑器D功能在感兴趣的文件之间导航。例如,如果 Package Explorer 之类的导航视图不可见Q可以?Ctrl+E ?Ctrl+F6 方便地在~辑器之间切换?/p>
同样QMylar 也能通过恢复上次完成一Q务时Ȁzȝ透视图(通过单击 Window > Preferences > Mylyn > Context 启用Q来理 Eclipse 的透视图。当不同的Q务对应于 Eclipse 提供的不同视图(例如Q有些Q务对应于 Java 开发,有些d对应?PHP 开发)(j)Ӟq一点很有用。当使用 Mylyn ?Planning 透视图时Q该功能特别用。如果在没有zdd时切换到 Planning 透视图,那么当停止要处理的下一个Q务时Q就?x)自动切换到那个透视图。?Planning 透视囑֏以更Ҏ(gu)地发现接下来要处理哪个Q务,因ؓ(f)q个透视图会(x)Q务编辑器?Task List 的区域最大化?/p>
Mylyn 的聚焦功能可以应用于所有在 Eclipse SDK 中显CZ下文的视图:(x)Package Explorer、Navigator、Project Explorer、Outline、Problems、Tasks、Debug、Packages、Types ?Members。Q何树(wi)视图的聚焦模式,?Project Explorer 都添加了(jin)兴趣修饰、过滤和展开理。在聚焦模式下,列表视图Q例?ProblemsQ也?x)按照兴等U分cR由于这U通用的支持,即定制的桥接器不支持?zhn)的工P?支持的工?/a>Q,仍然可以?Mylyn 用于?Java 目Q例?PHP 开发。本节简要地概述如何?Mylyn 用于使用其它语言和工L(fng)~程。要?jin)解更多信息Q请讉K 参考资?/a> 中的 Mylyn Extensions 链接?/p>
例如Q考虑使用 Ant ?PDE 开发一个应用程序。在q个场景中,Eclipse 工作区看上去和图 5 cMQ其中有多个视图被打开Qƈ昄上下文:(x) ?Mylyn ?Task List 视图相比QEclipse SDK ?Tasks 视图昄 to-do 标签{标讎ͼq种标记指示与一个资源有关的本地问题Q类g~译器警告。与 Mylyn 的Q务相比,q些标记的粒度要得多,因ؓ(f)它们对应于数行源代码Q而一?Mylyn d可能包含多个标记。由?Tasks 视图很快?x)发生超载,因此使用聚焦模式可以很方便地提醒开发h员在提交前清?to-do 标记?/p>
注意Q图 5 中的 Project Explorer 视图只显CZQ务上下文中的文gQ这里包括一些图像和 XML 文g。打开的文件是 build.xmlQ该文g由数十个 Ant 声明l成。在 Outline 视图中,只能看到(zhn)正在处理的声明Q而不是许多不感兴的声明。Problems 视图也聚焦于zddQ只能看到感兴趣的东西(如所有的错误?qing)警告或d上下文中其他的元素标讎ͼ(j)Q而不是被数百条无关的警告堆满而超载。最后,Eclipse Tasks 视图也处于聚焦模式,因而将只看Cd上下文相关的标记Q而不?x)看到数百条不?x)立即d?to-do 标记?/p>
在以dZ?j)的方式下编E更易于频繁q行单元试。通常来说Q单元测试实践让(zhn)ؓ(f)一个或多个当前正在从事的枯燥测试创Z个新的测试启动程序。其他的试Ҏ(gu)是:(x)在一个项目上q行所有测试,q会(x)错过一些相x试;或运行一整套试Q这很慢。ؓ(f)解决q些问题QMylar 在Q务上下文中自动维护了(jin)元素的单元测试套?—?UCؓ(f) Context Test SuiteQ见?6Q—?q在操作d时重复q行试变得很简单(用快捷键 F11Q:(x) 要启用该Ҏ(gu),?JUnit Plug-in 试或普?JUnit 试创徏一?Context Test Suite。Context Test Suite 被自动更斎ͼ以包括当前活动上下文中的所有测试用例?/p>
协作性工具都是关于共享信息的QQ务上下文能聚焦于该信息而阻止信息超载和分散。开发h员不断来回发送电(sh)子邮件、即时消息及(qing)文gQ来交换执行日常d所需的必要消息。尽?Mylar 仍没有排除对x消息或电(sh)子邮件的需要,但它能够通过它们锁定在d周围来简化一些协作活动。由于Q务定义了(jin)清晰、易于理解的工作单元Q且d上下文定义了(jin)与工作相关的信息Q所以用单击来共享Q务上下文的功能能够减协作通信负担?/p>
?W?1 部分 中,我演CZ(jin) Mylyn 的Q务管理如何将Z Web 的储存库Q如 BugzillaQ集成v来,从而提供了(jin)(zhn)期待从?sh)子邮g客户Z得到的那U协作集成程度和响应E度。这一节则解释 Mylar 对跟t更攚w和Q务活动的自动支持Q联合了(jin)对上下文׃n的支持)(j)是如何进一步便利了(jin)团队工作?qing)获取专门技术的。通常Q?zhn)可以?gu)需要以?Mylar 同源文g?qing)Q务存储库集成的程度挑选要使用的功能?/p>
Eclipse 有两U更攚w模式Q?.2 版中新出现的Z模型的更攚w和标准更攚w。尽这些模式实际上很难辨别Q但是基于模型的模式较ؓ(f)可取Q因为它同时昄引入和传出的更改。要?jin)解关于在这两种模式之间切换的详l信息,请参?Mylyn FAQQ参?参考资?/a>Q? 更改?/em> 是一用于对资源分组的内|的 Eclipse 工具Q可以在 Synchronize 视图中对其进行操作,以提交、更新或创徏补丁。除非在一个静(rn)态的目中工作,否则手动理更改集常常得不偿失。Mylar 通过自动理更改集便利了(jin)Ҏ(gu)存储库的操作。一旦激zMQ务,该Q务的更改集即被添加,q后显C在 Synchronize 视图Q见?7Q中。操作该d时做出的更改被添加到该更攚w中。可以用位于视囄 Change Set 节点的上下文菜单来覆盖、提交或创徏一个补丁。由团队成员做出的更Ҏ(gu)照Q务分l显C,可以通过右键单击一个引入的更改集来打开相应的Q务。如果有?jin)更改,但Q务停用,更改集不变,使?zhn)可以同时操作多项传出更改。Mylar 保在上下文和更攚w之间的一对一映射Q所以如果将一份文件手动地d到更攚w中(通过 Synchronize 视图中的上下文菜单)(j)Q该文g也会(x)被添加到上下文中。当前支持的源存储库?CVS ?SubversionQ包?Subclipse ?SubversiveQ?/p>
Z(jin)Ҏ(gu)本和 Java ~辑器的引用启用链接,例如对于 Bugzilla ?“see bug 123”Q或者对?JIRA ?“ABC-123”Q必d与资源对应的目与一个Q务储存库相关联。ؓ(f)此,可以右键单击目Q选择 PropertiesQ然后选择 Task Repository。每?Mylyn 解析资源中对d的引用时Q都要用项目到d储存库之间的q种兌Q所以这U关联对?History ?Team Annotation 链接也是必需的。如果项目是׃n的,可以该讄攑օ版本控制中?/p>
管一开始效果也怸明显QMylar 使用上下文将d和资源绑CL(fng)Ҏ(gu)对(zhn)工作的方式产生Ҏ(gu)性媄(jing)响。例如,对于 Mylar 目本nQ不需要编写提交消息,因ؓ(f)它们是由 Mylar 的更攚w集成Q?Window > Preferences > Mylyn > Team 面~辑用于生成自动提交消息的模板)(j)自动生成的。这使我们能够通过单击?History 视图D至与修订相对应的dQ这节省?jin)跟t更改及(qing)修订臛_始Q务的旉。相反地Q这也得可以通过 CVS 日志查询所有针对一个特定Q务更改过的文件。这个功能与 Eclipse 用于昄 Team Annotations 的功能和 Mylyn 的普通超链接Q见?8Q相l合Q意味着(zhn)将大量减少p在查找与一个更改相关的 bug 或Q务上的时_(d)因ؓ(f)通常只需一ơ单d可完成。(注意Qؓ(f)?jin)在弹出的文本编辑器中显C链接Q必L?Ctrl 键,如果要将弹出H口攑֜最前面Q需要按 F2 键)(j)?/p>
d上下文获取执行Q务时创徏的知识。重新激zM个Q务会(x)立即?zhn)带回到该d的上下文Q而不是迫使?zhn)恢复与该d相关的那部分pȝ。如果半途将dUMl团队成员,d上下文会(x)Z或她提供一个v炏V由于上下文是从交互中创建的Q而不仅从更改中创建,每个d上下文都包含?jin)相关信息,如处理该d时访问过?API 以及(qing)引用q的文档。ؓ(f)支持q个?qing)类似的协作场景Q如l对~程Q,上下文能被轻易地׃n。可以通过 Task ListQ如?9Q中的上下文菜单或通过单击d~辑器中相应的复选框来激zM下文׃nQ? 当用支持附件的d存储库连接器Ӟ可以Q务上下文附加?bug 报告中来L地实现共享。当获取一个共享上下文Ӟ可以从所有可用的上下文中选择Q如果当前有多个上下文的话)(j)。例如,?Mylar 目中,我们上下文附在每一个解决了(jin)?bug 报告中,q且要求每一个A(ch)献的补丁都要附上上下文。这U通过上下文共享专门技术的Ҏ(gu)使应用补丁、与团队成员协作处理 bug 报告、在l对~程?x)话l束后清理代码变得更加简单。所有已解决?bug 都存储了(jin)一个上下文Q这一事实意味着只要 bug 被重新打开或类似的错误发生Q我们都能立x复ƈ使用q去的技术?/p>
Mylyn 的设计确保它的上下文理功能不媄(jing)?Eclipse 的性能。无论?zhn)使用的系l大如何,Mylyn 都可以做到这一点,因ؓ(f)d上下文只与?zhn)所做的量交互对应Q而与(zhn)用的pȝ的大没有关pRMylyn 对内存或速度的Q何明昑֪(jing)响都被视作一?bugQ都应该作ؓ(f)严重问题q行报告。而且Q当没有zddӞMylyn 的Q务上下文理是完全休眠的。要?jin)解关?Mylyn 性能的更多信息,请参?Mylyn FAQQ参?参考资?/a>Q。要打开 Eclipse 的内存监视器Q可以?Window > Preferences > General > Show Heap Status?/p>
在这个由两部分组成的文章中,我介l了(jin)如何?Mylar q行以Q务ؓ(f)中心(j)的编E。我展示?Mylar 是如何通过Q务作?Eclipse 中头{重要的部分对待而让(zhn)日常的工作变得相当地简单。我也介l了(jin) Mylar 如何使用 Eclipse 视图来帮助?zhn)聚焦于手边的dQƈZ人及(qing)团队的用凸现这些Q务的上下文?/p>
Mylar 背后的哲学是就是多。它?yu)集成的d理和自动上下文理工具l合使用Q(zhn)能够在不丢׃下文的情况下q行多Q务处理,q确保?zhn)只需要查看感兴趣的信息。一个针对于?Mylar 用于日常工作的业内开发h员所做的现场用户的研I已l验证了(jin) Mylar 的Q务上下文模型Q参?参考资?/a>Q。根据统计,q些用户的生产率有了(jin)显著的提高。而且Q由于进行了(jin)数千?bug/增强报告QMylyn 2.0 很快成熟hQ满_快速增长的用户C的需要。自从在 2004 q?8 月创?0.1 原型以来Q我一直将 Mylyn 用于我的所有工作。和很多其它 Mylyn 用户一P我已l无法想象还要手动寻扑ƈ识别工作中的相关信息的情景了(jin)。我完全依赖 Mylyn 来管理工作中的大量以dZ?j)的交互和多d处理?/p>
如果 Mylar 支持(zhn)的d存储库,它能使?zhn)的日常工作变得更加简单、更加有效且更加专注。如果它不支持?zhn)的Q务存储库Q?zhn)可以试着用它来完成个ZQ务。不何U情况,都请使用 Bugzilla 集成来给出回馈ƈ为?zhn)愿意看到被支持的其他q接器投。(参见 参考资?/a>Q。?zhn)的A(ch)献将帮助我们q一步改q?MylynQ因为它?yu)持l围l严密的回馈机制快速发展,该工hw允许我们通过用户C建立q种回馈机制。其?Mylyn 提交者和我一P都期待收到?zhn)的回馈?/p>
Mylyn 能获得成功ƈ且走到现在,很大E度上得益于大量的用户参与,?她们报告 bug qA(ch)献补丁。正是这U协作让 Mylar 从一个研I原型发展成Z(jin) Eclipse 用户在日常工作中所依赖的一个重要部分?/p>
Athen O'Shea、Robert Elves、Gail Murphy ?Ducky Sherwood Ҏ(gu)文提供了(jin)有帮助的回馈?/p>
什么 Mylyn 变得 “灵y” ?/strong>
?1. ?Eclipse 聚焦于Q务上下文
支持的工?/strong>
技巧:(x)不过滤子节点
回页?/strong>
?2. 以Q务ؓ(f)中心(j)的工作区
技巧:(x) 配置 Task-Focused UI
?3. ?Java 元素视图聚焦于Q务上下文
技巧:(x)快速视?/strong>
?4. 自动折叠和内容辅助排?/strong>
getTask()
{感兴趣的方法在~辑器中也是展开的。公开元素兴趣{的各U机刉的一致性有助于 Focused UI 变得可预见且易于使用?/p>
?5. 佉K用 IDE 视图聚焦于Q务上下文
技巧:(x)清理 to-do 标记
?6. Context Test Suites
回页?/strong>
技巧:(x)更改集模?/strong>
?7. 更改集管理ƈ其映射CQ?/strong>
技巧:(x)项目与d储存库关?/strong>
?8. 链接和团队注释
?9. 通过d附gq行上下文共?/strong>
回页?/strong>
性能斚w如何Q?/strong>
分nq篇文章……
提交?Digg
发布?del.icio.us
提交?SlashdotQ?/a>
虽然软gpȝ、框架和工具可以无限制地发展Q但开发h员实际处理信息的能力h一个上限。大多数集成开发环境(IDEQ尝试用结构化视图、编辑器和高U搜索功能来解决q个限制。这些机制虽然可以大型pȝ的导航变得更Ҏ(gu)Q但是它们常怸以帮助(zhn)管理完成典型编EQ务所必须处理的大量信息。因此,l构化视图越来越不堪负荷 —?例如Q即使在D一个小型的企业应用E序ӞEclipse Package Explorer 也常怼(x)昄数千个源文g —?(zhn)要费大量的时间来滚动、导航和跟踪q些信息?/p>
有趣的是Q在大多数情况下Q不需要查看系l的整个层次l构或者某个特定方法的每个引用可以完成编EQ务。例如,对于要修复的M bug 或者要d的Q何特性,(zhn)只对系l的某一部分感兴。Mylyn 是一U交互技术,通过?em>集成的Q务管?/em> ?em>自动上下文管?/em> q两个功能添加到 Eclipse 中,可以H出昄(zhn)感兴趣的系l内宏VQ务管理将 task/bug/defect/ticket/story/issue 跟踪器集成到 Eclipse 中,q提供高U的d~辑和Q务调度功能。上下文理监视(zhn)与 Eclipse 的交互,自动识别与当前Q务相关的信息Qƈ聚焦l构化视囑֒~辑器,使其只显C相关信息。这两个功能一L(fng)成了(jin) Mylyn ?Task-FocusedQ以dZ?j)?j)UIQ多Q务处理变得更Ҏ(gu)Qƈ且极大减了(jin)信息蝲。(至于实际研究l果Q请参阅 参考资?/a> 节中研I论?“Using Task Context to Improve Programmer Productivity” 的链接。)(j)
![]() |
|
q个׃部分l成的文章是一?Mylyn 使用指南。本文的某些内容Q尤其指x~程而不是Q务管理的内容Q假设?zhn)熟(zhn)?Eclipse IDE。第 1 部分?Mylyn 入门Qƈ介绍?jin)它在Q务管理方面的功能?a cmimpressionsent="1">W?2 部分 介绍 Mylyn 的上下文理功能Qƈ讨论它的 Task-Focused UI 对编E和开发方法的影响。ؓ(f)方便赯Q将同时发表q两部分内容?/p>
W?1 部分q不适用于编E活动,它适用于在M Eclipse 发行版或者集?Mylyn 的独立应用程序中使用 Mylyn?a cmimpressionsent="1">W?2 部分 主要讨论 Java™ ~程Q但是也讨论?jin)适用于所有基?Eclipse 的工L(fng)一些特性。在本文的例子中Q我使用 Bugzilla 作ؓ(f)d储存库,但是q里的概念和 UI 同样适用?Mylyn 支持的其它Q务跟t器。即使?zhn)打算通过不同的连接器使用 MylynQ徏议?zhn)q是看看使用 Bugzilla Connector 的步骤,以便熟?zhn)关键?gu)?/p>
Mylyn 通过d跟踪q样的复杂机制扩展了(jin) Eclipse SDKQ从 参考资?/a> 节查看受支持的版本Q?em>dQtaskQ?/em>是?zhn)希望回调或与他h׃n的Q何工作单元,例如一个用h告的 bugQ或者关于一个特性改q的说明。Mylyn 使?zhn)可以在工作区本地存储dQ或者处理一个或多个d储存库中的Q务。(d储存?/em> 指诸?Bugzilla、Trac ?JIRA 之类的问题跟t器Q。要q接C个特定的d储存库,q必d装用于该储存库的 Mylyn q接?/em>?/p>
集成d之后QMylyn 监视这些Q务上的活动,以识别与当前d相关的信息。此ӞMylyn 创徏一?em>d上下?/em> —?与Q务相关的所有工件的集合。这可以包括览q的文档、编辑过的方法和引用q的 API。Mylyn 使用d上下文 UI 聚焦感兴的信息、隐藏不感兴的信息、自动发现相关的信息。具备了(jin)完成d所需的信息,可以减执行搜索、导航和滚动操作的时_(d)从而提高工作效率。通过H出d上下文,Mylyn q有助于多Q务处理、计划、重用过ȝ工作以及(qing)׃n专家l验?/p>
使用 Mylyn 一D|间之后,(zhn)的工作方式?x)发生微妙但是重要的变化。一旦习(fn)惯了(jin)以Q务ؓ(f)中心(j)的工作方式,(zhn)很可能?x)发现工作效率有了(jin)极大的提高。?zhn)的工作变得井井有条,可以l筹理数十个协作Q务ƈ跟踪q程Q这些事情都变得非常Ҏ(gu)?/p>
?1 中的~号区域昄?Mylyn 的一些Q务管理和上下文管理特性:(x) 单击 q里 查看全图?/p>
接下来的节讲解 Mylyn 的安装和配置Qƈ介绍它的关键Ҏ(gu)。对 Mylyn d理功能有了(jin)大致?jin)解后,?zhn)将更深入地?jin)解它对日常工作程的?jing)响? 在本文中Q我使用 Mylyn ?Bugzilla Connector 来展CZ用Q务储存库集成的关键概c(din)对于其它受支持的Q务储存库Q这些概忉|相同的,只是集成U别和连接器的成熟度有所不同。与 Mylyn 捆绑?Bugzilla ?Trac q接器非常成熟,q且被视作参考实现。Mylyn Extensions 面Q参?参考资?/a> 节Q列Z(jin)用于其它问题跟踪器和目理工具的连接器Q例?CollabNet、Rally、Mantis ?XPlannerQ?/p>
完全集成的连接器提供以下Ҏ(gu):(x) Z(jin)让?zhn)?Mylyn 获得完整的集成,q停止对外部或基?Web ?UI 的依赖,q接器必L持这里列出的所有四个功能。但是,只要 Eclipse 具备_ 可用于处理Q务的功能Q则仍然可以?Mylyn ?Task-Focused UI 中获益。如果连接器的Q务储存库不可用,(zhn)仍然可以:(x) Mylyn 现在被包括在大多?Eclipse 发行版中Q所以获得它的最单方法是?Eclipse Downloads 面下蝲一个包?Mylyn 的包Q见 参考资?/a> 节Q。但是,对于更新x?Mylyn 版本Q或者将 Mylyn 安装到没有捆l?Mylyn ?Eclipse 版本中,下面的说明仍然会(x)提供帮助?/p>
Mylyn 构徏?Java 5 的基上。如果试囄 JRE 1.4 或更早的版本q行它,那么它不能工作,q且?x)在启动时报错。可以通过 Help > About Eclipse SDK > Configuration Details (g)?Eclipse 使用哪个版本?JRE。有兛_装方面的故障排除Q请参?Mylyn FAQ Q参?参考资?/a> 节Q? 要安装适合(zhn)用的 Eclipse 版本?MylynQ可以?Eclipse Update Manager: Help > Software Updates > Find and install > Search for new features to install?当对 Eclipse 3.2 更新Ӟ最好用这U机Ӟ而不?Search for updatesQ因为后者不?x)执行正的依赖性检查。在 Eclipse 3.3 上,q两U方法都可行。想要了(jin)解提?Update Manager 的最?Mylyn 更新站点Q请参?Mylyn 的下载页面(参阅 参考资?/a> 节Q?/p>
Mylyn 的一个关键设计目标是?Eclipse 已有?UI 工具无缝集成。另一个目标是要求用户只安装和使用需要的Ҏ(gu)。图 2 昄?jin)用于选择要安装的Ҏ(gu)的 UI。例如,如果(zhn)的d?bug 归类QtriagingQ而不是开发,那么可以安装 Mylyn ?Task ListQ而不必安?Task-Focused UIQƈ且可以独立地选择用于问题跟踪器的q接器。Y件开发h员很可能要同时安装这两个Ҏ(gu)?/p>
当从更新站点选择要安装的Ҏ(gu)时Q可以选择一个或多个要用的d储存库。注意,正如 Mylyn Downloads 面提示的,(zhn)可能需要添加额外的更新站点Q以获得所需的连接器。当安装推荐?Task-Focused UI Ҏ(gu)时Q还应该选择所有可安装到当?Eclipse 版本的桥接器。(关于桥接器的详细信息Q请参阅 W?2 部分Q。重新启?Eclipse 3.3 或更高版本之后,可以看到?3 所C的Ƣ迎屏幕。如果当前用的?Eclipse 3.2Q那么可以从 Help 菜单手动打开q个Ƣ迎屏幕?/p>
Mylyn 提供?jin)用两U类型Q务的支持Q?/p>
本节展示如何创徏和编辑本CQ务,q考察用于使用储存库Q务的可用Ҏ(gu)。这里谈到的Ҏ(gu)的可用性取决于q接器的 集成U别Q所以只需参考那些适用的特性。无接器集成U别是多,都可以?d理和个?/a> 中讨论的 Mylyn 的所有Q务管理功能?/p>
安装 Mylyn 之后Q遵循以下步骤:(x) 创徏本地d的快h式是 Insert 键,或者也可以?Web 览器中文本或 URL 拖放?Task List 中。新d的描q将q?Web 面的标题自动填充。(?Firefox 中,只需常规的拖动动作;而在 Internet Explorer 中,在拖动的同时q需按下 Ctrl 键。)(j)?Task List 中双MQ务可以打开d~辑器(如图 4 所C)(j)Q在该编辑器中可以创建注解、粘贴相兌链接或者调度特定日期的d。默认情况下Q新创徏的Q务是在创Z日调度的?/p>
创徏?jin)十几个或者更多的本地d之后Q?zhn)可能想通过创徏cd 来组l它们。如果创ZQ务时没有?Task List 中选择cdQ那么该d被放入到 Uncategorized 容器中。可以?Task List 中的 Move to 弹出菜单或者Q务编辑器或者通过拖放操作一个创建好的Q务{Ud另一个类别中?/p>
要将本地d标记为已完成Q可以用Q务的弹出菜单或者Q务编辑器?默认情况下,被标Cؓ(f)已完成的d?x)被qo(h)掉,但是也可以通过 Task List 的视图菜单(使用 Task List 视图工具栏右侧的倒三角Ş打开Q选择不过滤它们。ؓ(f)?jin)避免凌乱,不要昄那些不显CZQ何Q务的cdQ例如,所包含的Q务全部完成的cdQ。?Task List 端?Find: 框访问被qo(h)的Q务。最后,可以通过d~辑器ؓ(f)本地d讄优先U和计划信息?a cmimpressionsent="1">d理和个?/a> 节更深入地讨划?/p>
Z(jin)熟?zhn)?Mylyn 的图标模式,可以使用 Task List 视图菜单中的 Show UI Legend 动作Q见?5Q?我将在整个文章中引用该图标模式?/p>
不同d储存库在功能和Q务管理的指代斚w可能有较大差别。Mylyn 的Q务管理功能提供了(jin)一U统一的方式用多U储存库Q包括:(x) Mylyn 的最常见问题和Q务储存库的连接有兟뀂?Validate Settings 按钮来验证?zhn)输入的凭证是正确的。如果需要Q何其它设|,例如|络代理Q可以用提供的其它区域中的其中一个再ơ验证。通常Q如果验证失败,d储存库连接器应该?x)提供一条有用的消息。如果没有提供消息,则可以参考连接器的文档或?Mylyn FAQQ参?参考资?/a> 节Q,对连接问题进行故障排除。还应注意,有些q接器要求在服务器上q行Ҏ(gu)的设|?/p>
要创Z个Q务储存库Q可以打开 Task Repositories 视图Q?strong>Window > Show View > Mylyn > Task RepositoriesQ,或者用一个包含它的透视图,例如 Team Synchronizing 透视图。打开后,使用视图的工hd一个新的储存库。然后,可以输入储存库凭证和M其它q接l节Q或者从可用模板中选择一个模ѝ图 6 中的 bugs.eclipse.org 储存库是在安?Mylyn 时自动创建的Q这是ؓ(f)?jin)便于报?Mylyn ?Eclipse ?bug 和特性请求?/p>
成功地添加了(jin)d储存库之后,可以通过 Task List 的弹单中?New Query 动作创徏查询来访问那个储存库上的d。例如,可以~写一个查询来讉K指定到我的电(sh)子邮地址的所?Bugzilla 报告Q如?7 所C:(x) Z(jin)支持各种不同的组l样式,Mylyn ?Task List 可以灉|地设|和使用cd和查询。例如,如果(zhn)的团队对于理重复d和用里E碑QmilestoneQ标识每?Bugzilla 报告很}慎,那么可以讄与这些里E碑对应的查询,q用这些查询来跟踪目的进度。但是,Ҏ(gu)我与 Mylyn 团队和其?Mylyn 采用者的合作l验Q我Q如果与其他Z间有很多合作Q则Ҏ(gu)人员范围界设|查询,如果主要是完成分配给自己的Q务,则根据组件或产品范围讄查询。然后,可以使用 Task List ?Go Into 动作Q位于所有Q务容器的弹出菜单中)(j)聚焦被分配的d或与一个特定组件相关的d。可以?Task Search (Ctrl+H) 功能随时更新里程的q度。具体而言Q徏议执行如下操作:(x) 虽然讄查询旉常只包括打开?未决?未完成的dQ但是我强烈包括所有Q务。默认情况下 Mylyn ?x)过滤完成的dQƈ且ɘq些d很容易通过 Task List 端?Find: 框来(g)索。如果查询只包括未完成的dQ那么一旦这些Q务完成之后,׃再会(x)在查询下昄。注意,我的用于所?Mylyn d的查询目前返?1,420 个元素,其中大多数已l完成。通常Q这样大的结果集不会(x)造成问题? 查询中不昄的已l完成的d?Archive 中仍然会(x)昄Q那里包含所有?zhn)工作q的d?/p>
度信息(例如里程)(j)讄查询?x)很有用Q但是这也会(x)造成 Task List 中充塞着彼此重复的查询。考虑使用 Search 功能来查询像目标里程之cȝ内容。通常Q查询对于设|?Task ListQ之尽可能明地昄正在处理的和与h协作的Q务很有用Q而搜索可以快速给?“在这个里E碑之后应执行什么操?#8221; 之类问题的答案?/p>
讄参数q单?Finish 之后QTask List 中的查询容器被相应的d填充。在查询执行同步ӞMylyn 在后台检索Q务的信息。下载完d信息之后Q可以立x开dQ因Z需要往q服务器来检索Q务的信息。要更改查询的参敎ͼ可以重新打开它(通过?Task List 中双?yn)L询)(j)q编辑所选择的倹{虽然对于不同的q接器查询参数的讄不尽相同Q但是查询参数设|都是用于反映连接器?Web UI 所提供的功能。有兛_建查询的详细信息Q请参阅q接器文档或服务?Web UI 文档?/p>
默认情况下,查询每隔 20 分钟自动q行同步Qƈ昄与查询参数匹配的CQ务。(可以通过 Preferences > Mylyn > Task List 更改q个旉。)(j)当与 Web 断开q接Ӟ不需要 Mylyn 处于ȝ模式。但是,如果惛_闭同?—?例如Q假设?zhn)要长旉ȝ工作Q或者直接根据所使用的带宽付?—?那么可以q么做,Ҏ(gu)是在 Task List 视图菜单中切?Synchronize Automatically 讄。然后,可以通过工具栏上的按钮手动地同步所有Q务和查询Q或者通过弹出菜单或快捷键 F5 单独同步每个d或查询。必要时Q可以从弹出菜单中将一个Q务储存库|于ȝ模式。当储存库不可用Q需要长旉ȝ工作Ӟq样做很有用?/p>
对于可以通过 Web 览器访问的q接器,Mylyn 集成?jin)用户已熟知?Web UIQ如?Mylyn 的富~辑功能不支持某些操作,(zhn)可能需要依赖于q个 Web UI。可以右键单MQ何Q务或查询Q以便用 Web 览器打开它(Eclipse 览器设|位?Window > Preferences > General > Web Browser 中)(j)Q具有关?URL 的所有储存库d都可以通过 Task Editor 的工h或者Q务的弹出菜单上的 Open with Browser 动作打开。还可以用浏览器打开 Bugzilla 查询Q例如,假设(zhn)想它_帖C电(sh)子邮件中Q以便?Bugzilla Web UI 对它q行改进Q。然后,可以按照 New Query 向导的提C粘帖它Q从而用更新后?URL ?Task List 中创Z个新的查询?/p>
搜烦(ch)dcM于创建查询,但是它不结果存储在 Task List 中。?Ctrl+H ?Search 菜单Q?strong>Search > Task SearchQ,选择感兴的储存库,输入搜烦(ch)条gQ然后单?Search。搜索视N之打开Q在该视图中可以打开与搜索匹配的dQ如?8 所C。要改进搜烦(ch)Q只需再次打开 Search 对话框,以恢复之前的搜烦(ch)条g。可以在 Search 视图中将搜烦(ch)l果从弹单{Ud一个查询中? 要创建新的储存库dQ可以在 Task List 工具栏或 File > New 菜单中选择相应的动作,如果有多个储存库Q那么要选择一个储存库。然后,q接器会(x)要求输入d的其它属性,例如它的 Bugzilla lg。然后会(x)打开一个新的编辑器Q在其中可以填入d的属性和描述。有些属性会(x)自动选好Q例如,如果使用 Bugzilla q接器,则会(x)自动选择操作pȝ? 作ؓ(f)一U快h式,可以在一个查询节点上单击右键Q这样可以自动选择与查询对应的储存库和产品。通常Q当调用需要输入的功能ӞMylyn ?x)尝试用(zhn)的选择来预先选定相关输入?/p>
(zhn)可能要创徏的另一UQ务是有关 Mylyn 或用的另一个基?Eclipse 的工L(fng) bug 报告。通过自动d bugs.eclipse.org 储存库,以及(qing)d可以?Eclipse ?Error Log 视图?Help 菜单中访问的用于自动报告 bug 的动作,制作 bug 报告很容易。如果要查看惌q行报告的错误事Ӟ只需右键单击它,选择 Report as Bug。然后会(x)打开 New Repository Task ~辑器,其中包括所有相关信息,例如栈跟t?/p>
׃q种通过一ơ单ȝ?bug 报告的方式可能导致大量重复的 bug 归档文gQ因?Mylyn q提供自动的重复(g)?strong>Search for Duplicates 按钮使用报告?Description 中的自动插入式或手动_帖式栈跟踪来查询相应的储存库,以发现潜在的重复内容。重复检的l果昄?Search 视图中,如图 9 所C。如果发现匹配,可以打开它,作出注释Q而不是创建新?bug 报告? 在打开一?Bugzilla dӞ(zhn)将注意到在~辑器上有一?Bugzilla 和一?Planning 选项卡。储存库q接器提供一个富~辑器,例如q个 Bugzilla 选项卡,用于~辑在储存库上共享的d信息。而且QPlanning 选项卡提供用本CQ务创Z人注解的相同功能?/p>
当查?bug 上的注释Ӟ可以使用 Outline 视图在注释之间导航,但是未读注释的自动折叠意味着可以?Task Editor 中进行大多数D操作。对其它d和其它结构化元素Q例?Java 栈跟t元素)(j)的引用被讄链接Q参见图 10 ??1Q。超链接的语法特定于q接器。通常Q在d~辑器左上角出现的引用可用于?bug q行链接。连接器?Web UI 支持的其它语法也受支持。始l支?task <key> 语法?/p>
如果q接器支持离U编辑,?Mylyn l护打开的Q何Q务的一个缓存副本,q且每当相应的查询或dq行同步Ӟ对这个副本进行更新。如果作ZQ何更改,例如讄一个属性或者编刉分注释,那么可以通过按下 Ctrl+S 在本C存更攏V这导致Q务上出现一?outgoing 指示W。当准备好提交Q务时Q单ȝ辑器底端?Submit?/p>
如果一个Q务之前已l被打开Q那么再ơ打开它时检索离U副本,q开始在后台对Q务执行同步。这样可以确保不需要等待往q服务器可以开始读取和处理d。如果发现新的更改,或者当~辑器打开时他人更改了(jin)dQ那么编辑器的标题栏?x)显C出来,q提C刷新编辑器?/p>
׃使用?Mylyn 的后台同步功能,不需要依赖电(sh)子邮仉知p知道 Bugzilla 中最新的 bug 报告更改。只需讄可捕捉?zhn)感兴的所有Q务(例如复制的每个报告)(j)的查询,可以收到简明的q入式箭头Ş式的通知Q这U通知不会(x)使?zhn)的收件箱蝲。通过选择 Window > Preferences > Mylyn > Tasks 讄同步调度。通过右键单击?wi)中的节点ƈ选择 SynchronizeQ可以手动地同步查询和Q务? 如果有其他h更改?jin)储存库中的dQ例如添加一条新的注释,那么在屏q的右下角会(x)弹出一个窗口显C更改,而Q务则使用q入?/em> 头标记昄。如果打开dQ则被更改的部分?x)高亮显C,被添加的新的注释自动展开。如果本地副本和服务器上的副本都被更改,那么可以看到一个红色的冲突指示W,q提C军_H。如果看到冲H,那么应该单击d~辑器的 Synchronize 按钮Qƈ且提交?zhn)的更改,或者通过弹出菜单?Mark > Clear Outgoing 攑ּ(zhn)的更改Q以保d被同步? 可以用Q务编辑器?Attachments 区的 Add... 按钮附件添加到储存库中。还可以从工作区或窗口管理器文件或文本直接拖到~辑器的 Attachments 区。添加附件时?x)出C个向|通过该向导可以选择Ҏ(gu)剪切板内宏V计机中的一个文件还是从 Eclipse 工作Z创徏附g。通过 Attachments 表,可以?Web 览器或~辑器打开附gQƈ通过上下文菜单执行特定的动作Q例如保存或复制到剪切板?/p>
现在Q我讨论如何 Mylyn 成ؓ(f)(zhn)的一个单独的d列表和收件箱Q以理工作周内所有相关的d。对于很多开发h员,要在一个给定的工作周内跟踪和调度的d的范围包括:(x) 所有Q务集成到一个视图中Q可以它们更易于管理,因ؓ(f)只需查看一个位|就知道接下来该做什么。ؓ(f)?jin)进一步简化Q务管理,Mylyn 隐式包含?jin)一些公认的d理最?jng)_践,例如调度和gqQ务,q且q包括了(jin) XP 式开发的x性和适应性。Mylyn 的Q务管理工具(zhn)可以轻村֜适应一周内的Q务变化需求,而不?x)丢失对长期优先U的跟踪。除?jin)将工作周的控制权交到(zhn)手上之外QMylyn 通过化用共享的储存库属性(例如里程和优先U)(j)Q在 Eclipse 中执行所有操作,从而帮助?zhn)更好地集成团队实c(din)? Mylyn 提供两种用于调度的日期:(x)预定日期Qscheduled dateQ?/em> ?em>到期日期Qdue dateQ?/em>。((zhn)可能已l注意到QQ务编辑器中显CZ(jin)q两U日期)(j)。预定日期可以帮助管理和优先排列自己的工作周Q而到期日期则对应于最后期限之cȝ固定事g?/p>
d的预定日期是Ҏ(gu)个h日程安排的可变日期,可以Ҏ(gu)优先U的变化而推q。它定义(zhn)计划开始处理Q务的旉。当d到达预定日期Ӟd变成U色Q以指示(zhn)应该开始处理它或者考虑推迟它的起始日期。定在今天执行的d?x)变成蓝色而不是红Ԍq且在工作日的最后进行安排,避免重新安排整个工作日的d?/p>
相反QQ务的到期日期是固定的日期QQ务必d成的日期。这个日期常怸外部的约束(例如最后期限)(j)相关。如果用共享的d储存库或者日历工P到期日期?x)进行同步,以便使团队的其它成员可见。例如,如果 Bugzilla 的时间跟t功能被启用Q那么可以通过d~辑器的 Attributes Z?Time Tracking |?Bugzilla d的到期日期,团队中的其他成员可以看到q个日期Q还可以~辑它。到期日期的临近是通过d图标上的一个小钟指C的Q这个小钟在到期日期之前Ԍ在到期日期之后ؓ(f)U色?/p>
׃ Mylyn 使得创徏和共享Q务变得如此容易,g(zhn)一旦开始用它QTask List 中很快就?x)装满数十个甚至数千个Q务。对?Mylyn 的早期用P包括我在内,实?x)发生这L(fng)事情。也许是因ؓ(f)我是W一批用P目前我的 Task List 包含过 5,000 个Q务,其中有超q?1,000 个Q务尚未完成。乍一看来Q这g?Mylyn 减少而不是增加信息超载的目标有冲H。ؓ(f)?jin)解册个问题,Mylyn 提供?jin)改q的功能来调度和推迟dQ用这些信息让 Task List 只显CZ(zhn)的工作周有关的d。新创徏的Q务定在创建日调度Qƈ且可以通过d~辑器的 Planning 区或上下文菜单快速地Q务推q到靠后的一个时间或日期?/p>
当Q务到N定日期之后,d和它的容器(例如一个查询)(j)变成U色Q桌面上昄一个弹出窗口作为提醒。(和其?Mylyn 颜色和字体设|一P可以?Window > Preferences > General > Appearance > Colors and Fonts Q务设|ؓ(f)高亮昄Q。当d被推q到来的日期执行时Q?strong>Window > Mylyn > Tasks > Scheduling 中设|的工作日v始时间决定Q务被调度的时间。通过更改工作日的l束旉Q可以确定被定ؓ(f)那天调度的Q务在什么时间到期?/p>
Mylyn d理模型的关键是Z兴趣的分cdqo(h)Q?zhn)可以通过 Task List 工具栏上?Focus on Workweek 动作启用该功能。聚焦模式导致只有与工作周相关的d才可以显C。这包括以下dQ?/p>
如图 11 所C,d被着色和分类Q以帮助(zhn)快速确定下一步Q务:(x) 通过L地调度和推迟dQƈ视N制ؓ(f)昄l定工作周内预定的Q务,Mylyn 帮助(zhn)全盘考虑优先U。ؓ(f)?jin)突出工作日QMylyn 用蓝色高亮显C所有在当天调度的Q务。由于在聚焦模式下工作时不大可能看到滚动条,因?Task List 保持展开Q所以?zhn)L知道应该考虑对什么作出响应或者下一步执行什么?/p>
考虑使用 Mylyn 的聚焦功能管理工作周的示例流E:(x) ׃d调度是Q务管理最重要的部分,Mylyn ?Task List 中提供了(jin) Scheduled 表示Q它Ҏ(gu)到期日期而不是类别和查询来组lQ务。在聚焦模式下,q种表示?x)显C一周每天必d成的所有Q务。这对于q整周的工作负载很有用。它的另一个优Ҏ(gu)当?zhn)使用׃nd时可以避免分?j),因?f)不会(x)昄有新注释但是未调度的d。要(g)查新到来的Q务,需要切换回 Categorized 表示Q重新确定优先次序,然后再重新审视时间表。当不在聚焦模式下,可以使用 scheduled 表示来^衡未来工作周的Q务负?—?例如Q通过鼠标?zhn)停?Next Week 容器上检查有多少d被推q?/p>
到目前ؓ(f)止,本文描述的所有功能都是将 Task List 当作一个统一的相关Q务的集合Q?zhn)可以灉|地调度这些Q务。此外,可以用查询来l织dQ还可以q一步嵌套子dQ前提是储存库连接器提供q种支持Q例?Bugzilla q接器就提供q种支持Q可以从 Task List 的视图菜单中启用该选项Q。但是,׃ Mylyn 2.0 ?em>工作集(working setsQ?/em>的支持,q可以对由完全不相关的Q务组成的集合q行处理。假设?zhn)在开发一个品和两个不同的开源项目。?zhn)可能x工作日的大多数时间花在最重要的品上Q但是还惌q其它项目。Mylyn 的工作集使?zhn)可以l织与一个特定品或目相关的查询和cdQƈ提供限定?Eclipse 工作Z昄的文件和其它资源的数量的功能?/p>
可以从工作集切换器下拉列表中选择 Show All 来查看所有元素,好像没有设|Q何工作集一栗这对于定期获得 Task List 的整体概况非常有用?/p>
使用 Task List 端的切换条Q创建包括相x询、类别和工作源的工作集(参见?12Q。只?Eclipse 视图被设|ؓ(f)昄 Window Working SetQ默认设|)(j)Q切?Mylyn 工作集可D Task List ?Eclipse 都只昄属于工作集的d和项目。例如,如果Z个开源项目设|了(jin)一个工作集Qƈ用下拉列表启用该功能Q那?Eclipse Task List、Package Explorer ?Problems 视图都只昄与那个项目相关的内容。Task List Find 只显C工作集中的匚wV甚臛_以通过 Search (Ctrl+H) 只查扑ַ作集中的内容Q如果工作区较大的话Q这样做很有用。换句话_(d)整个 Eclipse 只显CZ(zhn)创建的工作集相关的东西。工作集可以减少工作区的凌ؕQƈ且可以避免用多个工作区。在 W?2 部分 中,(zhn)将看到 Mylyn 如何q一步利用这U聚焦思想Q将 Eclipse 中的可见内容~小到单个Q务?/p>
除了(jin)一些自动化功能外,Mylyn q提供手动分cdqo(h)功能Q?/p>
?13 昄?jin)可用的手?Task List qo(h)器:(x) 手动搜烦(ch)和过滤会(x)增加重复切换不同qo(h)器和分类器的负担。对于默认模式下的操作不使用Q但是它们对于计划和l织d的确有用。注意,?Focus on Workweek zdӞ手动qo(h)和分c设|被用Q可以通过关闭聚焦模式来恢复它们?/p>
当组l?Task List Ӟ可以通过 Move to Category 上下文菜单或者选择上下文菜单中?Remove from Category UdMd。除非通过上下文菜单显式地删除dQ否则即使Q务已l从查询中消失或者从cd中删除,仍然?x)显C在 Task List 中。被删除的Q务可以在 Archive 容器中找到。可以通过 Task List 端?Find 框方便地搜烦(ch) Archive 或其它地方的旧Q务。单d双?Clear 按钮或按?Esc 键可以恢复之前可见的d。Archive 容器对于查看之前已解决且被注释的d也很有用Q因为创建查询的一U通用Ҏ(gu)是排除已解决dQ但是请参阅 查询讄Q了(jin)解有兌一做法的注意事)(j)?/p>
当用多个工作区Ӟ可以不通过 Import 获得dQ而是通过选择 Window > Preferences > Mylyn > TasksQ将d数据目录讄Z个共享的位置。如果将q个位置攑֜一个网l驱动器上,那么它应该可以通过一个快速的q接q行讉KQ因为它?yu)被频繁讉K。这是一个高U选项Q只那些手动理其工作区位置的用户用?/p>
聚焦模式使用得越频繁Q?zhn)?Task List 变得越有h(hun)倹{默认情况下QTask List 的自动备份已被启用,可以通过 Window > Preferences > Mylyn > Tasks 讄备䆾目录?要从备䆾恢复 Task ListQ可以选择相应的单选按钮,q择一个备份快照。默认情况下QMylyn 每天为所有Q务数据制作快照,q保?30 天的备䆾Q通过 Preferences > Tasks 配置Q。可以通过单击 File > Export 导出d?/p>
在这?Mylyn 使用指南的前半部分中Q我介绍?Mylyn 的Q务管理功能。我向?zhn)展示了(jin)这些功能如何支持个性化的Q务管理,以及(qing)它们如何?Bugzilla 之类的基?Web 的问题跟t器完全集成?Eclipse 中。我q对 Mylyn 理的典型的工作周或工作日作?jin)概qͼq展C如何管?Task List?/p>
无论(zhn)感兴趣的Q务储存库有多,Task List 视图只提供一个单独的位置来从中管理所有工作。这使?zhn)可以工作日中的更多旉花在高效?Eclipse 中,而不必频J切换到外部的浏览器H口。这q意味着(zhn)可以获得基?Web 的问题跟t器的富客户Z验,例如拖放附g和离U支持?/p>
使用 Mylyn 的最_ֽ部分卛_出现。一旦Q务显式呈Cؓ(f)工作的组成部分,Mylyn 开始自动管理它们的上下文。本文的W?2 部分介绍 Mylyn 的上下文理功能Qƈ展示q些功能如何减少信息蝲Q以?qing)如何多Q务处理简单到只需一ơ单d可完成。现在就请阅?W?2 部分?/p>
?1. Mylyn ?Task-Focused UI
回页?/strong>
回页?/strong>
技巧:(x)Mylyn 要求 Java 5 或更高版?/strong>
?2. 选择 Mylyn Ҏ(gu)和储存库连接器
?3. Ƣ迎屏幕
回页?/strong>
?4. ~辑本地d
?5. Mylyn UI 图例
技巧:(x)d储存库后认讄
?6. d Eclipse.org Bugzilla 储存?/strong>
?7. 创徏新的 Bugzilla 查询
查询讄
?8. d搜烦(ch)和结?/strong>
技巧:(x)右键单击一个查询节?/strong>
?9. 集成?bug 报告和重复检?/strong>
?10. 储存库Q务编辑器和内容辅?/strong>
技巧:(x)整理?sh)子邮箱收g?/strong>
回页?/strong>
?11. 调度d
技巧:(x)昄所有元?/strong>
?12. ~辑和切换工作集
?13. 手动 Task List qo(h)?/strong>
技巧:(x)׃nd数据
回页?/strong>
分nq篇文章……
提交?Digg
发布?del.icio.us
提交?SlashdotQ?/a>