程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 集中化Eclipse中的幫助功能

集中化Eclipse中的幫助功能

編輯:關於JAVA

長期以來,開發人員一直認為構建模塊系統可以很容易地更新系統中的某個部分,而不影響系統的其他部分。模塊性還可以通過新的方法很方便地對原始系統進行擴展。這就是作為一組插件來構建 Eclipse 的動機,這允許其他開發人員替代或增強已有的模塊。

Eclipse 中的“幫助”與其他環境一樣,是使用插件架構構建的。本文討論了如何利用這個有用的架構來外部化幫助內容。本文假定您已具備 Java™、Eclipse 和 Web 主題方面的應用知識。但並不要求您了解在 Eclipse 中“幫助”是如何組織的,以及插件的工作原理方面的所有知識。本文的目的是向您說明在集中的服務器(企業內部網或 Internet)上承載 Eclipse 環境的“幫助”方法和原因以及如何從該環境中對它進行訪問。

為什麼要集中化?

Eclipse 中的“幫助”不是單塊集成實體,而是為提供整體概念合並在一起的一系列插件。但即使這樣,也沒有真正回答以下問題:“為什麼要集中管理 Eclipse 中的‘幫助’?如果下載 Eclipse 的 Java 版本,則可以進行 Java 開發,並且可以得到本地所需的所有幫助”。這對於整個開發小組也是如此。其中每個人都可以有自己的本地“幫助”副本,您可以很好地使用這些副本,一直到有一天出現額外的插件。

插件的到來

在實際的項目中,那一天將會到來,到時您會認識到自己以及開發小組的其他成員都需要一兩個插件服務(或者由於它們經濟實惠,您會需要更多的插件)。對於任何不平凡的小組開發工作,從構建過程到正在使用的第三方 JAR 文件都要確保每個人的環境是相同的。這只是一個項目的最佳實踐:確保小組中的每個人都在構建同一事物。事實上,大量的第三方工具的作用只是處理這個實踐,這些工具有:Ant、Java Make 工具,用於支持連續集成的 CruiseControl,以及其他大量的工具。經驗豐富的 Java 開發人員認識到確保開發環境和過程在整個小組中可重復利用是一件較好的事情。為什麼“幫助”又各不相同呢?

當您在 Eclipse 中安裝插件時,經驗比較豐富的人員還可安裝他們自己“幫助”,由於組織“幫助”的方式的不同,似乎可以將權利合並到現有的“幫助”基礎架構中。這就是外部可訪問的“幫助”存儲庫能夠奏效的原因。正像您要保持開發過程的其他部分的一致性一樣,您的“幫助”不需要相同的一致性嗎?“幫助”包含現有的 Eclipse 幫助,還包含通過其他插件合並的幫助。

為了確保更好地使用幫助系統,您應當將自己的內容添加到此系統中,方法是將特定於項目和小組的通知添加到標准的幫助條目中。您可以下載使您工作更輕松的插件,但是必需確保小組中的每個人都能用相同的方法使用它,並且能夠訪問關於插件的相同通知。如果將所有信息放在同一位置,就會減少信息失去同步的可能性。這也是《注重實效的程序員》一書中寫到的最佳實踐,該書的作者是 Dave Thomas 和 Andy Hunt。他們闡述了“不要重復自己”(Don't Repeat Yourself, DRY) 的原則:如果您將同一信息存放在多個地方,它將失去同步,並且您不會再信任它的任何特定實例。如果遵循“不要重復自己”原則,您會了解單一副本是權威副本。這一點也適用於“幫助”。

Eclipse 中的“幫助”組織

在開始外部化 Eclipse 中的“幫助”之前,您必須了解一下是如何按環境組織“幫助”的。要做到這一點,您需要進一步弄清 Eclipse 中的“幫助”組織。

查看“幫助”內部結構的最簡單方法是使用 help 擴展點構建一個插件。由於 Eclipse 附帶插件開發環境(Plug-in Development Environment,PDE),所以構建一個新插件非常容易。首先,使用下列幾個方法之一創建一個新插件項目:File>New Project,然後選擇 File>New Plug-in Project...,或結合使用庫方法和 Control-N。如果您選擇這兩個通用項目創建選項中的任何一個方法,屏幕上都會顯示圖 1 所示的 New Project 對話框。

圖 1. 從通用項目庫創建新插件項目

向導的下一步允許您指定項目的詳細信息,如名稱和目錄結構。此對話框如圖 2 所示。

圖 2. 指定項目的物理屬性

在這種情況下,您只能創建“幫助”插件擴展點。但是,PDE 自帶了多種預置的擴展點,其中包括一個用於“幫助”擴展的擴展點。要查看擴展點列表,請在圖 2 的 Project Settings 中選中“Create a Java Project”,否則在隨後的向導對話框中不會出現示例擴展點。在這種情況下,您將最終創建 Java 代碼,因此將選擇該選項。如果您只需要創建一個“幫助”擴展,並且要使用預定義的擴展點,那麼請保持選中此選項。

下一個向導頁面允許您指定關於插件的元信息;如圖 3 所示。

圖 3. 關於插件的元信息頁面

為了使構建插件變得更方便,PDE 自帶了多種模板,其中包括預定義類型的插件。您可以利用這些模板圍繞“幫助”插件創建基礎結構。圖 4 顯示了一個向導頁面,該頁面允許選擇模板。

圖 4. 插件模板

自定義插件向導提供了多種擴展點,其中有一個是“幫助”擴展,如圖 5 所示。

圖 5. “幫助”擴展插件模板

最後,您要選擇“幫助”插件將要提供的內容類型,它顯示在最後一個向導頁面上,如圖 6 所示。

圖 6. 內容類別的選擇表

通過 PDE 向導這一過程的最後結果是形成一個文件集,其中包括 XML、Java 源和構建基礎結構。

TOC 的內部

PDE 向導(圖 6 所示)的最後一個頁面會創建一個 TOC.XML 文件,它是將包含在插件中的那些“幫助”文件的內容表(TOC)。這個 TOC 格式用於 Eclipse 的內部幫助和插件;它始終是一致的。默認情況下生成的 TOC 文件如清單 1 所示。

清單 1. 默認情況下生成的 TOC 文件

<?xml version="1.0" encoding="UTF-8"?>
<?NLS TYPE="org.eclipse.help.toc"?>
<toc label="Repository Table of Contents" topic="html/toc.html">
   <topic label="Getting Started">
    <anchor id="gettingstarted"/>
   </topic>
   <topic label="Concepts">
    <anchor id="concepts"/>
   </topic>
   <topic label="Tasks">
    <anchor id="tasks"/>
   </topic>
</toc>

注意:在圖 6 中創建的標題顯示在 <toc> 標記的頂部,它指向 html/toc.html 的主題。 這個 TOC 條目位於幫助集的幫助目錄結構中的最高一層。也就是說,實際的幫助 HTML 文件將出現在根目錄下指定的目錄結構中。通常情況下,為了節省空間,這些 HTML 文件以 zip 文件形式出現(傳統上稱為 doc.zip)。如果對 Eclipse 插件目錄進行搜索,將會看到大量的 doc.zip 文件,其中的每一個文件都包含一個將其合並到 Eclipse 的主幫助中的幫助(無論何時調用該幫助)。

TOC 文件中的其他條目指向與第一個 TOC 同時生成的其他的 TOC。其中有“gettingstarted”、“concepts”和“tasks”。這些二級 TOC 條目中的每一個在項目中都有對應的 XML 文件目錄。另外在該項目中,PDE 還為 HTML 文件內容創建了適當的目錄結構。在圖 7 中,從 Package explorer 截取的片斷明顯地表現出了這種情況。

圖 7. PDE 構建 XML 配置文件和目錄結構。

由於有了這個結構,您可以用適當的結構創建滿足您需要的多個幫助文件,並將他們放入 zip 文件中,這樣就可以通過 Eclipse 中的幫助系統浏覽器將他們完美地合並成一個文件。

構建外部存儲庫

知道了 Eclipse 中幫助文件的結構方式之後,您會檢查如何將它外部化到獨立的服務器中。Eclipse 通過提供一個稱為 Infocenter(與 Eclipse 一起安裝)的工具簡化了這一過程。您可能已猜到,Eclipse 中的幫助系統實際上是由嵌入 Web 服務器/servlet 引擎驅動的。事實上,它將拆分式版的 Apache Tomcat 用作幫助應用服務器。Eclipse 附帶的一個插件是 org.eclipse.help.appserver_3.0.0,它可以封裝 Web 服務器。Infocenter 使應用服務器外部化,這樣您可以在 Eclipse 環境之外對其進行操作。

Infocenter

要在外部服務器上設置 Infocenter,請安裝 Eclipse 運行時二進制文件 (Eclipse Runtime Binary),您可以從 Eclipse 下載 zip 文件形式的這個文件。將它解壓縮到服務器上的目錄結構中(注意:此過程與安裝 Eclipse 相同,是在服務器上執行的操作)。除 infopops(對上下文敏感的工具將提供彈出式窗口)和 Active 幫助(它可從幫助視圖執行命令,像創建一個新文件一樣)外,Infocenter 支持所有的內部幫助功能。這些高級幫助功能從外部服務器是不可能實現的。Infocenter 作為一組 Java 類包含在二進制文件中,可以從命令行調用它。

要啟動服務器上的 Infocenter,請發出如下命令,其中 [ehome] 是 Eclipse 的安裝目錄(為便於閱讀分成了多行,它應該是單個命令行,如清單 2 中所示)。

清單 2. 啟動服務器上的 Infocenter

java
-classpath [ehome]\plugins\org.eclipse.help.base_3.0.1\helpbase.jar
org.eclipse.help.standalone.Infocenter
-eclipsehome [ehome]
-port 8081
-command start

此命令將 classpath 設置為指向 Infocenter JAR 文件,通知該文件 Eclipse 安裝的位置,設置端口號並發出 start 命令。要停止該服務器,您可發出相同的命令,但要用 shutdown 代替 start。啟動 Infocenter 之後,立即就可以使用浏覽器並發布一個 URL,如 http://localhost:8081/help/index.jsp。

您將在浏覽器中看到標准的 Eclipse 幫助信息,如圖 8 所示。

圖 8. 外部運行的 Eclipse 幫助

獨立的 Infocenter

Infocenter 是一個獨立服務器,所以它不需要其他 Web 服務器。但是,在實際環境中您要控制一些重要問題(例如,由常規 Web 服務器能夠很好處理的訪問控制、可視性和其他方面的問題)。您可以基於 URL 模式,輕松地將 Web 服務器設置為將命令轉發到 Infocenter。

例如,您可以將 Apache 中的代理模塊設置為以 http://bigsprawlingcompany.com/eclipsehelprepo 的形式將請求重新定向到 Infocenter URL,該 URL 看上去像是對 Apache 的 conf/httpd.conf 文件使用以下更改的 http://internalhelpserver:8081/help。

LoadModule proxy_module modules/ApacheModuleProxy.dll
ProxyPass /eclipsehelprepo http://internalhelpserver:8081/help
ProxyPassReverse /eclipsehelprepo http://internalhelpserver:8081/help

幫助訪問中的堵漏

現在您已將幫助外部化,您需要一種從 Eclipse 內部訪問它的方法。可以使用好幾種方法可做到這一點。在本文中,您將會創建一個指向新的遠程庫新頂級菜單項。通過重寫現有菜單項,您能夠替代現有的幫助行為,但這是不可取的。破壞已經存在的東西通常不是一個好做法,尤其是在這種情況下。您或許不想讓開發人員在幫助服務器出於某些原因而停機時失去獲得本地幫助的能力。當開發插件時最好使用 Hippocratic Oath 的部分變體:首先不要損壞它。

創建新菜單項的最容易方法是讓 PDE 向導為您構建基礎結構。要創建此幫助庫菜單項,請使用與前面更改一個向導頁面相同的順序。對於圖 5 中顯示的模板選擇頁面,添加了一個新的“示例操作”,如圖 9 所示。

圖 9. 向幫助庫添加示例操作

此操作為新菜單項創建一個基礎結構。因為您正在創建新的操作,所以您還會得到新的向導頁面,該向導頁面允許您指定操作名稱。此頁面如圖 10 所示。

圖 10. Sample Action 類向導頁面

此頁面允許您命名並隨後創建 Action 類。此 Action 類包含用於在 Eclipse 中添加新操作的示例代碼,在本例中綁定到菜單項。只有您需要添加的代碼才是調用幫助查看器的代碼,該查看器可以是標准的 Eclipse 幫助查看器,也可以是浏覽器。在這種情況下,您可以調用用戶的默認浏覽器。使用功能完備的浏覽器可以提供與幫助查看器相同的各種好處,而且還允許用戶在與開發相關的 Web 上的收藏夾旁為幫助庫代碼創建收藏夾。run() 方法中的代碼是一行代碼:

public void run(IAction action) {
    Program.launch("http://localhost:8081/help");

當然,您可以將 URL 放到幫助庫中。再進行一些努力,就可以在允許您指定地址的 Preferences 對話框中添加設置,這樣就無需將它硬編碼到插件中。但是,該主題最好留到構建修改 Preferences 對話框的插件的文章中進行討論。

綜合

創建了菜單插件之後,就可以將它附加到 Eclipse 主菜單欄中已外部化的 Infocenter 幫助中。圖 11 顯示了這個新菜單。

圖 11. Eclipse 中新的 Help Repository 菜單項

當單擊這個菜單項時,它會啟動 Infocenter 幫助,無論您在自己的計算機上配置了何種外部浏覽器。圖 12 顯示了最後的結果。

圖 12. 從 Eclipse 菜單插件啟動的外部化的幫助浏覽器

好啦! 現在您已經有了一個外部幫助庫,在這個庫中,您可以開始整合整個應用程序開發小組的幫助系統。在逐漸習慣於使用這些現成的資源後,您會驚呀過去為什麼沒有使用它。

結束語

將本文討論的所有知識點綜合起來,會比學習各個的單獨部分收獲更大。您可以使用所有適當的插件幫助以及自己的內容為開發人員創建高度定制的幫助集。將公司的編碼標准放在幫助中,並與其他參考資料放在一起不是很好碼?

如果您在開發環境外創建了幫助,那麼還可以將它用於在家中或遠程客戶端站點的開發人員。幫助環境成了一種無價的參考資料。事實上,幫助的外部化比供應商提供的靜態信息分組要有用得多。您可以讓幫助成為開發環境的一個動態的、有機的組成部分。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved