前篇有寫過這款 iDempiere ERP 介紹如何編譯與執行,環境是在 Ubuntu 18.04 下,也可以說是發布版的操作紀錄。

iDempiere 的 Wiki 文件都是建立在 Ubuntu 環境下的操作,所以如果要在 Mac 下建立一套開發環境怎麼做呢?

那就自己來 cross compiler 囉!

前置準備須知

首先參考 Wiki 中的開發前置準備文件:Install Development Prerequisites,會知道需要的環境有:

  1. OpenJDK 11

  2. Mercurial 版本管控工具的客戶端

  3. Maven 3.6.0 專案管理工具

  4. Eclipse IDE for Java EE Developers 4.9.0 SimRel.2018-09 開發工具(下為延伸套件外掛)
    4.1. Java 11 Support for Eclipse 2018-09 (4.9)
    4.2. Mercurial Eclipse Plugin 2.2
    4.3. Tycho Build Tools 0.4.1
    4.4. Maven Tycho Utilities 1.0.0
    4.5. Tycho Configurator
    4.6. m2e connector for maven-dependency-plugin

  5. PostgreSQL 9.6 以上版本(這邊流程安裝 10 版本就不需要額外安裝 contrib 套件即可支援 UUID 功能)

整體看起來其實都是剛好為跨平台的套件組合,所以 Mac 上要開發也不是問題了!上述順序也是下方依序安裝的流程。

安裝 OpenJDK 11 (當前版本 11.0.2)

Mac 上的 Java 環境其實滿簡單的,有內建的功能做多版本管理,所以安裝方式不論是下載安裝包還是手動安裝都幾乎沒問題。

http://jdk.java.net/11/ 下載 OpenJDK 11 ,下載對應 macOS / x64 版本回來後解壓縮。

然後移動解壓縮後的資料夾至 /Library/Java/JavaVirtualMachines/ 目錄下

cd ~/Downloads && tar xf openjdk-11.0.2_osx-x64_bin.tar.gz && sudo mv jdk-11.0.2.jdk /Library/Java/JavaVirtualMachines/

輸入指令: /usr/libexec/java_home -V 確認目前指定的 Java 版本。

確認目前指定的 Java 版本

如果不是 11.0.2 就是輸入指令改變當前運行的 Java 版本。

export JAVA_HOME=`/usr/libexec/java_home -v 11.0.2`

如果要預設改變登入後的 Java 版本就是將上述這段指令放到 ~/.bash_profile 或 ~/.zshrc 中。

安裝 Mercurial 版本管控工具的客戶端

Mac 上我建議都會安裝 Homebrew 作為套件管理工具。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安裝好後一行指令安裝 Mercurial: brew install mercurial

測試指令 hg --version 看看有無成功。

安裝 Maven 3.6.0 專案管理工具

這工具本身跨平台,有 Java 1.7 以上版本就可以執行,所以先到下載頁面,下載 apache-maven-3.6.0-bin.zip 檔案,將這工具解壓縮在自己管理套件的資料夾下(本文假設是 /Users/chun/workspace 下方自行取代為自己設定的目錄)

然後編輯 ~/.bash_profile~/.zshrc 看自己有沒有改過終端機的 shell ,設定對應的 profile。

這部分我是使用 Oh My Zsh 所以是編輯 ~/.zshrc 這份檔案(如同安裝 Java 那段落),補上:

export M2_HOME=/Users/chun/workspace/apache-maven-3.6.0
export PATH=$PATH:$M2_HOME/bin

然後輸入指令: source ~/.zshrc 來啟動指令! 並使用 mvn -v 來檢查指令是否生效了。

安裝 Eclipse Simrel 開發編輯器

這部分其實跟 Wiki 沒有任何差別,Eclipse 這套工具也是跨平台,所以照著說明操作都一樣。

首先是到 Eclipse IDE for Java EE Developers 下載 Mac OS X (Cocoa) 64-bit 版本,安裝方式不贅述,就是複製到應用程式資料夾中完成。

接著打開 Eclipse App ,過程會問是否要建議一個 Workspace ,預設即可,之後可以改。

下方文中預設使用 Eclipse 的 workspace 路徑是 /Users/chun/eclipse-workspace (自行替換成自己的工作目錄)

安裝 Java 11 Support for Eclipse 2018-09 (4.9)

然後到選單 Help 找到 Install New Software 功能,在新開啟的視窗中找到 Work with: 欄位,輸入 http://download.eclipse.org/eclipse/updates/4.9-P-builds/ 點選 add 加入清單,選擇並讀取一陣子後可以在中間視窗選擇 Eclipse Java 11 support for 2018-09 development stream 套件然後點選 Next > 下一步直到完成。(中間會詢問同意使用條款)

套件安裝都是非同步的,注意 Eclipse 最右下角的進度,完成後下一個安裝。

安裝 Mercurial Eclipse Plugin 2.2

到選單 Help 找到 Eclipse Marketplace 功能,在新開視窗中 Find 的欄位輸入 MercurialEclipse 找到套件並點擊 install 安裝。

過程一樣會有可能問你同意條款的問題以及可能會需要不理會問題繼續安裝,最後問你是否要重新啟動,都選擇同意與繼續即可。

在這邊與 Wiki 寫的 2.6.0 版本不一致的問題經過測試,只要確定是該套件就沒問題。

安裝 Tycho Build Tools 0.4.1

到選單 Help 找到 Install New Software 功能,新視窗中 Work with: 欄位輸入 https://raw.githubusercontent.com/idempiere/binary.file/master/p2-third-party/tycho-build-tools 然後 add 加入清單選取後,中間找到 Tycho Build Tools 項目,選擇 Base Bundle, Mavenize, Rename, Version Tools 這四個外掛安裝。

Eclipse Marketplace 中其實也可以找到這套件,但是對方主機有問題抓不到,所以改 repo 到這個位置。

安裝 Maven Tycho Utilities 1.0.0

到選單 Help 找到 Eclipse Marketplace 功能,新開視窗中的 Find 欄位填入 Tycho 點擊 Go 搜尋。找到套件 Maven Tycho Utilities 1.0.0 並點擊 install 安裝。

安裝 Tycho Configurator

上述安裝都完成後,點擊選單上的 Eclipse 找到 Preferences,左側找到 Maven 後選取 Discovery,如下圖!

這邊真的是比較特別一點,放圖紀錄一下。

Maven

然後點選畫面中的 Open Catalog 按鈕,新視窗的 Find 欄位輸入 Tycho 搜尋,找到 Tycho Configurator 後點選 Finish 安裝。

過程會有一點讀取時間,要等。

安裝 m2e connector for maven-dependency-plugin

完成上一步驟後,這步驟安裝也是一樣作法,點開 Open Catalog 按鈕後改搜尋 m2e connector for maven-dependency-plugin,並點擊 Finish 完成安裝。

安裝 PostgreSQL 10

Mac 這邊有 PostgreSQL 資料庫的好幫手 Postgres.app。 且因為後續 iDempiere 中有多處是直接使用系統指令 psql 等 PostgreSQL 操作方式來對資料庫操作,不適合使用 Docker 容器來包裝(只裝連線端 Client 工具實在太半套)。

這款 App 下載方式參考連結網站,下載安裝後開啟,左下角的「+」號開啟自訂選項的資料庫設定,選擇版本 10 的資料庫建立後 Start

postgresapp

這套的使用有再開一篇介紹 [Mac] 超級方便開發使用的 PostgreSQL 資料庫工具 - Postgres.app ,很方便開發者能夠切換資料庫版本與設定。

介面端的設定如此,指令端也不難,將指令目錄路徑 /Applications/Postgres.app/Contents/Versions/latest/bin 加載到 PATH 上就啟用了。

同樣是編輯 ~/.zshrc~/.bash_profile 檔案:

export PGSQLAPP_HOME=/Applications/Postgres.app/Contents/Versions/latest/bin
export PATH=$PATH:$PGSQLAPP_HOME

存檔後使用 source ~/.zshrc 啟用設定。

下載 iDempiere 原始碼

到這步驟環境也差不多完成,即將進入整合開發環境的階段,Wiki 文件可以參考這部分Steps to build and setup development environment

首先要將 iDempiere 原始碼下載回來

#自行替換自己 Eclipse workspace 路徑
cd /Users/chun/eclipse-workspace
hg clone https://bitbucket.org/idempiere/idempiere

這會需要抓一段時間與一個穩定的網路來下載,如果不幸網路很慢可以參考這份 bad connection 的做法處理,總之就是要抓回來這麼大包就是了!

抓回來後,因為取得不易很難得,文件建議是使用 hg clone idempiere custom-idempiere 複製一份 custom-idempiere 出來當開發用,原本的 idempiere 資料夾就維持更新,不客製化。

下方的指令是針對開發用的 custom-idempiere 資料夾處理,用來切換版本與更新最新版。

hg update default
hg update release-6.2
hg pull -u

custom-idempiere 目錄現在是在 /Users/chun/eclipse-workspace/custom-idempiere 這裡哦! (請自行替換自己的工作目錄)

測試編譯 iDempiere 原始碼

到這邊就將環境都準備的差不多了,來測試編譯專案看看!

開始之前需要先修正一個參數,畢竟其實這個專案並沒有在 Mac 上測試編譯過。囧~

vi org.idempiere.parent/pom.xml

找到 environments 的區間,補上下方資料。

<environment>
    <os>macosx</os>
    <ws>cocoa</ws>
    <arch>x86_64</arch>
</environment>

完成後存檔,輸入 mvn verify -U 測試編譯(或用 mvn validate 純建置環境不編譯,較快),過程耗時看電腦與網路速度決定。完成後會看到一片綠油油的畫面。

iDempiere 編譯成功

編譯出來的資料放置在 org.idempiere.p2/target/products/org.adempiere.server.product/ 目錄,可以找到三個平台(linux, macosx, win32)的執行檔案,目前僅測試過 Linux 版本,其餘如果有人成功歡迎分享~

其實使用 Eclipse 來編譯的話,不用改那個 environment ,使用 mvn validate 準備好環境就可以,不會出錯。

建立 Eclipse 專案

能夠編譯成功後就是要掛上 Eclipse 編輯器上連動了! 參考 Wiki : Import projects in Eclipse

首先,開啟 Eclipse,找到選單 File -> Switch Workspace 切換新的工作目錄到 /Users/chun/eclipse-workspace/custom-idempiere (自行替換自己的工作目錄)

匯入已存在的專案,File > Import ,找到 Maven > Existing Maven Projects 下一步,瀏覽專案工作目錄,選取全部專案後繼續完成匯入。

然後到選單 Project 取消勾選 Build automatically

檢查 Workspace 編碼設定。到 Eclipse 選單下找到 Preferences,左側選擇 General > Workspace 確認 Text file encoding 選項是設定為 UTF-8 以及隔壁的 New text file line delimiter 選項是否為 Unix ,如果不是就改成這個設定。

接著設定專案目標平台。一樣是在 Eclipse 中,找到 File 選單匯入功能 Import,選取 General > Existing Projects into Workspace,選擇下一步按鈕瀏覽工作目錄下的 org.idempiere.p2.targetplatform ,點選 Finish 完成匯入。

之後在 Eclipse 中編輯 org.idempiere.p2.targetplatform 下的 org.idempiere.p2.targetplatform.target 這個檔案。參考下圖最快,我看文件也研究了一下才懂XD

編輯 targetplatform 設定

步驟 4 是先點選「Set as Active Target Platform」連結後才會變成「Reload Target Platform」,中間會去背景下載一些套件,如果有錯誤就是再點一次「Reload Target Platform」。

這步驟也是差不多完成基本設定。可以重新將選單上 ProjectBuild automatically 選項重新勾選回去!

設定 PostgreSQL 10 資料庫

由於是開發模式,稍後運作的 iDempiere 並沒有自帶匯入資料庫設定,要先處理設定資料庫的部分。

打開 Postgres.app 點兩下開啟設定好的 10 版本資料庫任何一個,會出現一個指令畫面,分別輸入下方指令:

#先建立使用者角色
CREATE ROLE adempiere SUPERUSER LOGIN PASSWORD 'adempiere';
#再建立資料庫並賦予角色
CREATE DATABASE idempiere OWNER adempiere;
#開權限
ALTER ROLE adempiere SET search_path TO adempiere, pg_catalog;

這樣預設資料庫建立完成後也能在 App 介面中看到,往後可以直接點選操作。

然後在工作目錄 /Users/chun/eclipse-workspace/custom-idempiere 下輸入指令:

#解壓縮預設資料庫
jar xvf org.adempiere.server-feature/data/seed/Adempiere_pg.jar
#匯入預設資料庫
psql -d idempiere -U adempiere -f Adempiere_pg.dmp

到這邊還只是「預設」,中間還有每個版本的演進導致的資料庫版本落差,這部分需要先去查看資料庫的版本移轉紀錄

#點兩下資料庫,開啟 psql 連線後輸入下方 SQL 查詢語法
SELECT name FROM adempiere.ad_migrationscript ORDER BY 1;

對應列出的 SQL 檔案都在工作目錄下的 migration 目錄,依照順序匯入這些更新檔案。文件中也有人覺得這樣人工匯入很不人性,於是提供一個 shell script 來自動匯入,下方是我改版的方法。(僅替換預設目錄跟設定)

上述資料庫更新作業結束後輸入下方最後更新的語法結束這回合。

#一樣還是在工作目錄下(如果有執行上面腳本的話就不用自己手動跑這段)
cat migration/processes_post_migration/postgresql/*.sql | psql -d idempiere -U adempiere

中間正常來說都不會出問題,有出問題後面大概也會出問題。

上述對於資料庫的操作解釋甚少,也是不要浪費太多版面。因為是在自己的電腦上作業,安全性等其他細節就不多贅述,上線的版本還是要記得密碼該強的要強,連線該限制的要限制。

如果 App 在這邊有顯示 Port in use 被佔用導致無法使用的問題,可以透過下列方式解決:

  1. 關閉 Eclipse 測試的執行模式
  2. 關閉 pgAdmin 連線

都還是無法的話使用指令 sudo lsof -i:5432 查詢 PORT 5432 被佔用的問題,然後用 kill 去殺掉佔用程序,搞定。

啟動 Eclipse 整合編譯與執行模式

到這個階段前,可以先去執行檢查更新(Help -> Check for Updates)。避免有套件是舊版本的導致錯誤發生。

前面已經測試指令模式編譯也沒問題後,現在要來套用上 Eclipse 編輯器執行。

到選單上找到 Run 與點選 Run Configurations 新視窗左側選擇 Eclipse Application 點選 install.app 修正 Arguments 分頁項目(如下圖, -os ${target.os} -arch ${target.arch} -nl ${target.nl} -consoleLog -console )後點選 Apply 儲存, Run 執行。

Arguments 設定

在這邊會彈出一個畫面確認與編輯預設連線資訊,除非有改,不然照著預設來設定,也不用去調整什麼。

iDempiere 連線測試

確認過就點 Save 去執行測試。沒出現什麼紅字 ERROR 錯誤就下一步。

一樣到選單上找到 Run 與點選 Run Configurations 新視窗左側選擇 Eclipse Application 點選 server.product 項目後修正 Arguments 分頁項目(如下圖,指定編譯的平台 -os ${target.os} -arch ${target.arch} -nl ${target.nl} -consoleLog -console )點選 Apply 儲存後 Run 按鈕執行。

server.product Arguments 設定

執行畫面:

Eclipse 執行 iDempiere

畫面中間下方會跑一連串訊息,沒有噴 ERROR 的例外處理訊息與最後跑到 osgi> 即表示啟動成功。

本段流程與前段流程有 iDempiere 專家 Ray 導師的影片教學可以參考(環境是 Ubuntu ,不過概念與流程都差不多): https://www.youtube.com/watch?v=ccoI9gpt-Jc

Mac OS 上編譯與執行會有雷,詳細參考 Wiki:Note to MacBook users

啟動完成後,打開瀏覽器瀏覽: http://localhost:8080 就可以看到本機運作的 iDempiere ERP 囉!

本機開發 iDempiere ERP 登入畫面

看到這裡,是不是覺得很輕鬆呢?(毆)

更多跟 iDempiere 開發有關的資源都還可以從 Wiki 這邊Software Developer's Guide 找到,除了內容被切成好幾份有點分散需要自行拼湊外,都還是滿詳細與完整的!

PS: 如果把 Eclipse 關閉後重新啟動會需要再去 org.idempiere.p2.targetplatform.target 設定中 Reload Target Platform。之後再點選 Run server.product 開啟。

Facebook 外掛功能


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]