【整合與部署】2Pack 打包與 Plugin 開發:環境同步完全指南

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

  1. 選擇要匯出的類型(Menu、Table、Window…)
  2. 勾選相關項目
  3. 執行 Pack Out
  4. 產生 PackOut.zip 檔案

三、Pack In(匯入)

路徑:System Admin → Pack In

  1. 上傳 PackOut.zip
  2. 執行 Pack In
  3. 系統自動建立相關 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.zip2Pack_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)。

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *