首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Eclipse 3.4 RCP 應用程式部署 Feature Patch 完整指南

     編輯:Java 相關知識

產品發布後,難免會遇到用戶回報的緊急問題或小型缺陷。若等待下一個正式版本發布週期過長,且透過 Software Update 介面安裝更新對商業化 RCP 產品而言過於笨重,甚至可能因安裝環境客製化而失效。此時,Feature Patch(功能補丁) 是最靈活、輕量的解決方案。本文詳細說明如何基於 Equinox 架構,為 Eclipse 3.4 RCP 應用建立、部署 Feature Patch,並針對部署後常見問題提供診斷思路。

核心概念:Feature 與 Feature Patch

在 Eclipse 架構中,Plug-in(插件) 是功能實作的最小單位(對應 OSGi Bundle),但粒度過細,不利整體管理。Feature(功能部件) 將功能相關的插件組織起來,讓用戶以模組層級管理產品,支援品牌化、依賴聲明與更新管理。若 RCP 產品採 Feature 為安裝單位,單純替換 plugins 目錄下的 Jar 檔並不生效,必須以 Feature 為單位建立補丁,即 Feature Patch。

Feature Patch 特性:

  • 專門針對特定 Feature 版本建立,不直接參與 Eclipse 啟動流程
  • 僅包含需更新的插件,部署後只覆蓋目標 Feature 中的部分元件
  • 採增量式策略:每個 Feature 同一時間僅存在一個 Patch,新 Patch 需包含舊 Patch 所有修正

版本號規範與匹配規則

Eclipse 插件版本採四段式 major.minor.service.qualifier:

段位變更時機
majorAPI 重大變更,minor/service 歸零
minor對外可見的功能增強、效能優化、核心重構
serviceBug 修正、編譯選項調整等小版本釋出
qualifier每次 Build 的差異(如日期、建置編號)

Equinox 載入規則:依序比較 major → minor → service → qualifier(ASCII 碼大者優先)。Feature 版本應反映其內含插件最典型的變更層級。

match 規則(在 feature.xml 定義相依性時指定)決定版本過濾邏輯:

  • perfect:版本號需完全相同
  • equivalent:major/minor 相同,service ≥ 指定版本
  • compatible:major 相同,minor/service ≥ 指定版本
  • greaterOrEqual:major/minor/service 任一 ≥ 指定版本

建立 Feature Patch 四步驟

步驟 1:蒐集資訊

  • 需更新的插件清單(例:cn.myplugin)
  • 所屬 Feature ID 及版本(例:cn.myfeature_1.0.0)
  • 該 Feature 是否已套用過 Patch
  • 是否有插件需在安裝時解壓縮(unpack="true")

步驟 2:更新插件版本號

修改程式碼後,依修正規模調整版本:小型補丁僅遞增 qualifier(例:1.0.0.v20091225 → 1.0.0.v20100101),大型 Fix Pack 再調整 service。

步驟 3:使用 Feature Patch 精靈建立專案

  1. File → New → Other → Plug-in Development → Feature Patch
  2. 專案命名慣例:<featureID>.patch
  3. 關鍵設定:「Properties of features being patched」務必選擇帶具體版本號的 Feature(可從 Target Platform Browse 選取)
  4. 於 feature.xml 編輯器的 Plug-ins 分頁加入需更新的插件,並同步更新 Patch 版本號

步驟 4:匯出與產生 P2 中繼資料

  • 右鍵專案 → Export → Plug-in Development → Deployable feature
  • 若版本含 .qualifier,在 Options 分頁勾選 Qualifier replacement,替換字串 ASCII 碼需大於原版本
  • Eclipse 3.4.0 必須額外產生 P2 中繼資料(3.4.1+ 內建支援):
    eclipsec.exe -application org.eclipse.equinox.p2.metadata.generator.EclipseGenerator \
    -metadataRepositoryName "[PATCH_NAME]" -metadataRepository file:[PATCH_LOCATION] \
    -artifactRepository file:[PATCH_LOCATION] -source [PATCH_LOCATION] \
    -flavor tooling -append -noDefaultIUs -inplace -nosplash

部署與驗證

將產生的 features/、plugins/ 複製至產品安裝目錄,重啟應用即完成部署。為支援累積式補丁並安全移除舊版,建議結合 Link 機制:將補丁置於 Link 指向的獨立目錄,透過腳本自動化複製與清理 Eclipse 快取(-clean 參數),確保載入最新版本。

驗證三法:

  1. Help → About → Plug-in Details 確認插件版本號
  2. Help → Software Updates 檢視 Patch 版本資訊
  3. 實測新增功能是否生效

常見問題:新版插件未生效診斷

若重啟後版本未更新,常見原因有二:

  1. 插件相依性未滿足:match 規則與新版本號不符
  2. 插件被多個 Feature 包含:導致版本衝突

診斷思路: 啟動 OSGi Console(-console 參數),觀察 Bundle 狀態轉換:

  • 狀態為 INSTALLED → 相依性未解析(檢查 match rule)
  • 新版本完全不出現 → 可能被其他 Feature 遮蓋,需檢查 Feature 結構

Bundle 狀態流轉:INSTALLED → RESOLVED → STARTING → ACTIVE(或 LAZY)。僅有滿足相依性才能進入 RESOLVED,進而啟動。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved