2Pack 打包與 Plugin 開發:環境同步完全指南
2Pack 是 iDempiere 的設定匯出/匯入機制,可將 Table、Window、Menu 等定義打包成 XML,在不同環境間同步。本文將教你如何使用 2Pack 以及開發自己的 Plugin。
一、什麼是 2Pack?
2Pack 可以匯出/匯入的內容:
- AD 定義(Table, Column, Window, Tab, Field, Menu)
- Reference 與 Reference List
- Process 定義
- Role 與權限設定
- Message 翻譯
不包含:交易資料、Java 程式碼
二、Pack Out(匯出)
路徑:System Admin → Pack Out
- 選擇要匯出的類型(Menu、Table、Window…)
- 勾選相關項目
- 執行 Pack Out
- 產生
PackOut.zip檔案
三、Pack In(匯入)
路徑:System Admin → Pack In
- 上傳 PackOut.zip
- 執行 Pack In
- 系統自動建立相關 AD 定義
四、自動 Pack In:Plugin 開發
將 2Pack 包進 OSGI Plugin,系統啟動時自動匯入。
兩種 Activator
| Activator | 檔案命名 | 數量 |
|---|---|---|
| AdempiereActivator | 2Pack.zip | 只能一個 |
| Incremental2PackActivator | 2Pack_*.zip | 可多個 |
Plugin 專案結構
com.yourcompany.plugin/
├── META-INF/
│ ├── MANIFEST.MF
│ └── 2Pack.zip # 或 2Pack_001.zip
├── src/
│ └── com/yourcompany/
│ ├── model/ # Model 類別
│ ├── process/ # Process 類別
│ └── validator/ # Validator 類別
└── OSGI-INF/
└── *.xml # Service Component 定義
MANIFEST.MF 範例
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: My Plugin Bundle-SymbolicName: com.yourcompany.plugin;singleton:=true Bundle-Version: 1.0.0 Bundle-Activator: org.adempiere.plugin.utils.AdempiereActivator Require-Bundle: org.adempiere.base Bundle-RequiredExecutionEnvironment: JavaSE-17
Incremental 版本
Bundle-Activator: org.adempiere.plugin.utils.Incremental2PackActivator
檔案命名:2Pack_001.zip、2Pack_002.zip…
五、打包與安裝
打包成 JAR
# 使用 Eclipse Export 或 Maven mvn clean package
Felix Console 安裝
telnet localhost 12612 osgi> install file:/path/to/plugin.jar Bundle id is 123 osgi> start 123 osgi> ss # 確認 Bundle 狀態為 ACTIVE
六、注意事項
- ⚠️ 資料庫重刷後,Plugin 仍會自動重新掛載並執行 Pack In
- ⚠️ 要完全移除,必須先卸載 Plugin 再清資料庫
- ⚠️ Process 和 Model Validator 需要額外寫 Java code
- ⚠️ 2Pack 只同步 AD 定義,不含資料
常見問題 FAQ
Q1: AdempiereActivator 和 Incremental 怎麼選?
初次安裝用 AdempiereActivator,後續更新用 Incremental 可疊加多個版本。
Q2: Pack In 失敗怎麼處理?
檢查 log 檔案,常見原因:相依性不存在、欄位類型不符、版本不相容。
Q3: 如何移除已安裝的 Plugin?
osgi> stop [bundle-id] osgi> uninstall [bundle-id]
然後手動清理 AD 定義(或還原資料庫)。
Q4: 可以只匯出部分 Table 嗎?
可以,Pack Out 時只勾選需要的項目。
Q5: 2Pack 支援資料匯出嗎?
支援 Reference Data(如 List、Role),但不支援交易資料(Order、Invoice)。
發佈留言