本文分享在 Windows 上面建置 OpenNMS 的開發環境

作業系統: Windows 7 x64 專業版
JDK版本: 1.8.0_74
Eclipse 版本: Eclipse 4.5.2 for Java EE (MARS.2)

1. 安裝必要軟體

A. 安裝 Git:

a. 下載 Git for Windows (x64) 並執行

b. 在 "Adjusting your PATH environment" 畫面時, 請選 "Use Git from the Windows Command Prompt", 其餘用預設值即可

B. 安裝 Perl: Windows 上面的 Perl, 當然就選用 ActivePerl  (x64) 囉. 一樣用預設值一路安裝下去即可

C. 安裝 JDK:

a. 必須 JDK 1.8 以上, 建議就裝最新的 x64 版本吧 (撰寫本文時最新版是 1.8.0 Update 74)

b. 安裝完畢後, 請在 "系統環境變數" 設定 JAVA_HOME 變數

 

2. 下載並解開 Eclipse

從 https://eclipse.org/downloads/ 下載合適的 Eclipse. Eclipse IDE for Java Developers 應該就足夠 (只是我習慣使用 Eclipse IDE for Java EE Developers ^^). (註: Eclipse 版本必須為 4.2 (含) 以上)

下載完畢後請在桌面建立一個捷徑, 並修改加上 -vmargs -Xmx2G 參數

3. 設定 OpenNMS code conventions

OpenNMS 以 ArsDigita Engineering StandardsJava Standards 制定的 coding conventions 為基礎, 並小小的修改一下 (忽略 1.16.1.1 Avoid creating objects unnecessarily)

A. 下載 OpenNMS 提供的 Formatter: 檔名為 ArsDigita.eclipse_formatter.xml.txt, 但是儲存時請改名稱為 ArsDigita.eclipse_formatter.xml (把 .txt 拿掉)

B. 執行 Eclipse

C. 點主功能表的 "Windows" --> "Preferences" --> "Java" --> "Code Style"

D. 設定變數的 Code Style (Prefix)

Fields 的 Prefix List 設定為 m_
Static Fields 的 Prefix List 設定為 s_

E. 匯入 OpenNMS 提供的 Formatter

點 "Code Style" 底下的 "Formatter" --> "Import", 選擇剛剛下載的 xml 檔案 (ArsDigita.eclipse_formatter.xml)
匯入成功後, 會多出一個 ArsDigita 的 Profile

 

4. 安裝 Plugins

A. 安裝 OpenNMS Plugins:

a. "Help" --> "Install New Software"
b. 在 Work with 輸入網址 http://eclipse.opennms.org/
c. 點 "Select All"
d. 點 "Next", "Next"
e. 點 "I accept the terms of the license agreement" 後點 "Finish"
f. 安裝完畢後請按 "Yes" 以重啟 Eclipse

B. Spring IDE: 依上述步驟安裝 Spring IDE:

a. Work with 輸入 http://dist.springframework.org/release/IDE
b. 不要全選, 只選 "Spring IDE Code", "Spring IDE AOP Extension", 與 "Spring IDE OSGi Extension" 三項

C. EGit: 依上述步驟安裝 EGit

a. Work with 輸入http://download.eclipse.org/egit/updates
b. 選 "Eclipse Git Team Provider" 與 "JGit" 兩項即可

 

5. 下載 OpenNMS Source

筆者習慣把 Source Code 放在 D:\Source 下面, 因此:

A. 執行 "命令提示字元" (cmd)

B. 執行 git clone git://github.com/OpenNMS/opennms.git

C. Source 會放在 D:\Source\opennms 目錄底下

 

6. Compile

下載 Source 後必須 compile 一次, 以自動下載必要的檔案 (libraries), 以免缺這缺那的.

原文的說法很簡單, 就下 compile.bat 指令, 但筆者實際操作時發現會有錯誤發生 (註: 筆者的 JDK 確實是放在 D:\jdk\jdk1.8.0)

image

這個問題琢磨了很久, 終於發現這很可能是一個 bug, 因為按照 OpenNMS 原本的寫法, catfile($JAVA_HOME, 'bin', 'java') 的結果會是 %JAVA_HOME%\bin\java (Windows) 或 $JAVA_HOME/bin/java (Linux). 但 Windows 的 java 執行檔應該是 %JAVA_HOME%\bin\java.exe =_= (註: 這段程式碼是要用 java.exe -version 取得 java 版本資訊, 並測試 java 的版本是否 >= 1.8)

另外在編譯與測試過程中, 又出現無法移除暫存目錄的問題 =_= 火大啊~

好吧, 為了讓工作繼續進行, 我們轉一下:

A. 修改 D:\Source\opennms\bin\functions.pl, 將 catfile($JAVA_HOME, 'bin', 'java') 改為 catfile($JAVA_HOME, 'bin', 'java.exe')

B. 修改 D:\Source\opennms\opennms-test\src\main\java\org\opennms\test\FileAnticipator.java, 把檢查 temporary directory 有無刪除成功的那段給註解掉!

image

C. 另外發現會有日期格式的錯誤: 測試時用的是英文的月 (Mar, Aug, ...), 但中文的 Windows 預設卻是中文的月 (三月, 八月, ...), 導致測試失敗. 這應該是設計上沒有考慮到其他國家語系的問題 (只要在程式裡面設定 Locale 應該就可以排除), 筆者也懶得檢查所有的程式了, 直接從 Windows 控制台改時間格式為 "英文 (美國)", 很卑鄙技巧地排除這個問題. (註: 不知道能否用環境變數來設定 JVM 執行環境的 Locale? 有請高手指導)

D. 又出現一個問題, log4j 比對失敗, 我猜是 Windows 環境加了 0x0d (\r) 的關係. 理論上應該去改 log4j 的 config, 但這只是 test, 筆者懶得去找了, 直接修改 D:\Source\opennms\features\poller\remote\src\test\java\org\opennms\netmgt\poller\remote\support\Log4j2StringAppenderTest.java, 將 assertEquals("w00t\n", appender.getOutput()) 改為 assertEquals("w00t\r\n", appender.getOutput())

註: 查了 OpenNMS 裡面的幾個 log4j.properties (真的不少個), 發現他的 Pattern 都用 %n 結尾 (在 Linux 會解釋為 \n, Windows 則解釋為 \r\n), 而 OpenNMS 的 Test 程式比對時寫死為 \n, 這樣當然會比對錯誤 =_=

E. 最後在這裡卡住動彈不得 =_= (DirectoryWatcherTest), 看了目錄的權限發現竟然沒有權限, 而且用管理員權限也搶不到? WTF!

 

可以開始編譯了 =_= 切換到 D:\Source\opennms 目錄, 下指令 compile.pl, 這樣至少過了版本檢查那關, 下載其他必要的軟體元件並開始編譯了. 這個步驟會花很久時間, 需要數十分鐘.

image

過程中也可能出現 Windows Firewall 的確認訊息, 若有出現請勾選全部網路類型 (網域/私人/公用) 後按 "允許存取"

 

7. 匯入 Eclipse 專案

A. 執行 Eclipse

B. 在 Project Explorer 按滑鼠右鍵, 點 "Import" --> "Import"

C. 點 "Maven" --> "Existing Marven Projects", "Browse" 到 "D:\Source\opennms" 後按 "確定"

D. 按 "Select All" 後點 "Finish", 然後又會進入一個漫長的等待~~~ (Eclipse 會花很多時間去 rebuild project)

image

E. 未完待續 (還有啊 =_=)

 

看起來要用 Windows 來建置 OpenNMS 開發環境真的有點難度, 我猜 OpenNMS Team 應該都是用 Linux 做為開發平台吧, hahaha

 

A. 參考資料

創作者介紹

Egg Chang 的部落格

Egg Chang 發表在 痞客邦 PIXNET 留言(0) 人氣()