使用 eclipse + erlide 來管理 erlang 代碼是一種常見方式。本文簡要說明下,本人在 windows 下管理 rabbitmq 代碼時遇到的小問題。
首先,搭建好 eclipse + erlide 的環境,方法略;然後,将下載下傳好的 rabbitmq 源碼放置在指定的目錄中,比如 d:\erlangcode\rabbitmq-server-3.0.0 ,目錄中的内容如下圖所示:
照道理講,一般源碼包中的 readme 和 install 會說明源碼包的使用方式,當時 rabbitmq 的不是,這兩個檔案中都僅僅給出了到官網的網頁連結,其中一個網頁中提到了
change to the rabbitmq-server directory, and type make.
好吧,以上用法時針對 unix-like 中的 make 方式的。如果你打算在 windows 中搭建個 linux 模拟環境以使用 make 指令按上面說的,執行個 make 就 ok 了。但我不想搭環境,也不打算直接在 linux 上執行指令後,再将檔案拷回到 windows 上來,所有我要研究下如何解決這個問題。好,先将這個問題暫停下,說說我在 eclipse 上得到了什麼。
将 rabbitmq 工程導入到 eclipse 中後,你能看到下圖所示内容:
恩,該導入的都導入了,但是出現了很多紅色的叉,可以看到 problems 标簽下的 error 描述資訊為 “can't find include file "rabbit_framing.hrl"” ,回到源碼所在的根目錄中搜尋該檔案,該檔案确實是不存在的,恩,該檔案不存在的原因我就不啰嗦了,可以在官方文檔中找到答案,我們需要解決的是如何得到該檔案。
在沒有其他線索的情況下,最好的辦法還是看看源碼包中的其他檔案,看看是否有什麼相關的。最後可以定位到 rabbitmq-server-3.0.0 中的 makefile 檔案。其中能說明問題的代碼是
<a href="http://my.oschina.net/moooofly/blog/100224#">?</a>
1
2
<code>$(include_dir)</code><code>/rabbit_framing</code><code>.hrl: codegen.py $(amqp_codegen_dir)</code><code>/amqp_codegen</code><code>.py $(amqp_spec_json_files_0_9_1) $(amqp_spec_json_files_0_8)</code>
<code> </code><code>$(python) codegen.py --ignore-conflicts header $(amqp_spec_json_files_0_9_1) $(amqp_spec_json_files_0_8) $@</code>
可以看出 rabbit_framing.hrl 檔案的産生,依賴了 codegen.py 、amqp_codegen.py 、$(amqp_spec_json_files_0_9_1) 及 $(amqp_spec_json_files_0_8) 對應的檔案。後兩個宏的定義同樣可以找到:
<code>amqp_spec_json_files_0_9_1=$(amqp_codegen_dir)</code><code>/amqp-rabbitmq-0</code><code>.9.1.json</code>
<code>amqp_spec_json_files_0_8=$(amqp_codegen_dir)</code><code>/amqp-rabbitmq-0</code><code>.8.json</code>
好,現在按照上面腳本中的指令,在 cmd 中執行:
此時檢視 include 目錄你會發現已經生成了我們要的檔案:
按照上面的方法,生成後續需要的另外兩個檔案 -- rabbit_framing_amqp_0_9_1.erl 和 rabbit_framing_amqp_0_8.erl :
此時,在 eclipse 中對 rabbitmq 工程執行 refresh 動作,你會發現所有的紅色叉叉都沒了,世界變美好了,哈哈~~
接下來,該幹啥幹啥吧~~