本篇文章更新時間:2019/04/10
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
前篇有寫過這款 iDempiere ERP 介紹如何編譯與執行,環境是在 Ubuntu 18.04 下,也可以說是發布版的操作紀錄。
iDempiere 的 Wiki 文件都是建立在 Ubuntu 環境下的操作,所以如果要在 Mac 下建立一套開發環境怎麼做呢?
那就自己來 cross compiler 囉!
前置準備須知
首先參考 Wiki 中的開發前置準備文件:Install Development Prerequisites,會知道需要的環境有:
-
OpenJDK 11
-
Mercurial 版本管控工具的客戶端
-
Maven 3.6.0 專案管理工具
-
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 -
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 版本。
如果不是 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
,如下圖!
這邊真的是比較特別一點,放圖紀錄一下。
然後點選畫面中的 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
。
這套的使用有再開一篇介紹 [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
純建置環境不編譯,較快),過程耗時看電腦與網路速度決定。完成後會看到一片綠油油的畫面。
編譯出來的資料放置在 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
步驟 4 是先點選「Set as Active Target Platform」連結後才會變成「Reload Target Platform」,中間會去背景下載一些套件,如果有錯誤就是再點一次「Reload Target Platform」。
到這步驟也是差不多完成基本設定。可以重新將選單上 Project
的 Build 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
被佔用導致無法使用的問題,可以透過下列方式解決:
- 關閉 Eclipse 測試的執行模式
- 關閉 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
執行。
在這邊會彈出一個畫面確認與編輯預設連線資訊,除非有改,不然照著預設來設定,也不用去調整什麼。
確認過就點 Save
去執行測試。沒出現什麼紅字 ERROR 錯誤就下一步。
一樣到選單上找到 Run
與點選 Run Configurations
新視窗左側選擇 Eclipse Application
點選 server.product
項目後修正 Arguments
分頁項目(如下圖,指定編譯的平台 -os ${target.os} -arch ${target.arch} -nl ${target.nl} -consoleLog -console
)點選 Apply
儲存後 Run
按鈕執行。
執行畫面:
畫面中間下方會跑一連串訊息,沒有噴 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 開發有關的資源都還可以從 Wiki 這邊Software Developer's Guide 找到,除了內容被切成好幾份有點分散需要自行拼湊外,都還是滿詳細與完整的!
PS: 如果把 Eclipse 關閉後重新啟動會需要再去 org.idempiere.p2.targetplatform.target
設定中 Reload Target Platform
。之後再點選 Run server.product
開啟。