close

本文分享在 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. 參考資料

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Egg Chang 的頭像
    Egg Chang

    Egg Chang 的部落格

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