在Windows用Rebar來構建,編譯,測試,發布Erlang項目


rebar是一個遵循 Erlang/OTP 原則的 Erlang 項目構建工具,使用它可以減少構建標准 Erlang/OTP 項目架構配置的工作量,並且可以很容易的編譯、測試、發布 Erlang 應用程序。更強大的是,rebar 提供一種依賴管理機制,它可以使開發者很方便地通過 GitHg 等方式重用常見的第三方 Erlang 模塊或庫。

安裝rebar

 

你可以在 https://github.com/rebar/rebar里下載zip包或者源代碼自己編譯。

在根目錄下有一個文件bootstrap.bat。執行,你會生成兩個文件rebar.cmd和rebar 這兩個文件,在以后的項目開發中要用到。(bat文件執行,雙擊或者在cmd下執行都可以,最好有administrator權限。)

或者你可以把這兩個文件Copy到你系統變量能夠訪問到的地方,或者把你生成的路徑添加到你自己的系統變量中去。這樣你就可以在任何地方使用rebar命令了。

 

用Rebar構建項目

 

首先你要創建一個你的工作目錄。然后把剛才生成的兩個文件Copy到你的工作目錄下面,或者如果你已經添加了系統變量,則不需要。

我們這里建立一個工作路徑D:\myapp,然后執行下面的命令來創建一個Erlang項目,項目的名稱叫做myapp

rebar create-app appid=myapp

這條命令會創建一個src文件夾,並在下面生成3個文件:

  • myapp.app.src 應用的資源描述文件,影響后面編譯生成的 rebarapp.app 里的內容
  • myapp_app.erl 應用的 Application Behaviour 代碼文件
  • myapp_sup.erl 應用的 Supervisor Behaviour 代碼文件

同時rebar還內置了OPT相關的其它文檔魔板,你可以自動生成相應的框架代碼:

  • rebar create template=simplesrv srvid=myapp_server
  • rebar create template=simplefsm fsmid=myapp_fsm
  • rebar create template=simpleapp appid=myapp_app

執行完之后則會在src目錄下生成對應魔板的文件。這里gen_server對應simplesrv,gen_fsm對應simplefsm,application對應simpleapp,相應的魔板ID分別是srvid,fsmid,appid。

用rebar編譯項目

 

你可以用下面的命令來編譯整個項目:

rebar compile

編譯完成之后,會生成一個ebin文件夾,里面存放了應用的資源文件myapp.app和對應beam文件。

rebar clean 可以用來清理編譯玩的項目

rebar doc 可以用這個命令來生成對應的doc文檔,會生成一個doc的文件夾,打開里面的index.html就可以看到所有的模塊的API描述,當然你必須要符合Edoc的描述格式。具體可以參照這里:http://www.erlang.org/doc/apps/edoc/chapter.html

用rebar配合eunit測試項目

 

在rebar文件夾下有個rebar.config文件,可以在這里配置eunit選項來進行測試。首先我們把rebar.config拷貝到我們的項目目錄里。然后更改rebar.config文件的內容成下面:

%%-*- mode: erlang -*-

%% Erlang compiler options

{erl_opts, [debug_info,

            {i, "test"},

            {src_dirs, ["src"]}]}.

{eunit_opts, [verbose, {report, {eunit_surefire, [{dir, "."}]}}]}.

{cover_enabled, true}.

 

上面的配置會加載test文件下的測試文件,所以我們需要自己建立一個test文件夾。

然后要生成相應的測試用例文件。首先我們建立一個文件myapp_test.hrl的測試用例文件,內容如下

-include_lib("eunit/include/eunit.hrl").

   

 my_test() ->

    ?assert(1 + 2 =:= 3).

 simple_test() ->

    ok = application:start(myapp),

    ?assertNot(undefined =:= whereis(myapp_sup)).

 

然后在myapp_server.erl文件的末尾加上下面的代碼:

-ifdef(TEST).

-include("myapp_test.hrl").

-endif.

 

如果有必要你需要在每個模塊的文件最后都加上上面的代碼,然后執行下面的命令來進行eunit測試:

Rebar compile eunit

如果沒有什么問題的話,你應該能看到下面的信息,會告訴你eunit測試情況:

======================== EUnit ========================

module 'rebarapp_server'

rebarapp_server: my_test...ok

rebarapp_server: simple_test...[0.015 s] ok

[done in 0.047 s]

module 'myfsm'

module 'myapp_sup'

module 'myapp_app'

=======================================================

All 2 tests passed.

Cover analysis: d:/Mongodb/projects/.eunit/index.html

這樣你就可以打開.eunit/index.html來查看測試結果。

用rebar來發布應用

 

如果要發布一個應用,我們需要在應用目錄下,創建一個名為rel的文件夾,用來作為發布用的文件夾。然后我們進入到新建的rel文件夾下面,用下面的命令來創建一個名為myapp的獨立的Erlang VM節點:

rebar create-node nodeid=myapp

修改rel/reltools.config里的lib_dirs的值,默認這里是一個空的列表,改成應用所在的目錄結構"[../../]"。

然后應用的根目錄下面,在rebar.config里加上一行,把新建的rel文件夾放入到rebar可以訪問的子文件夾里,作為應用內容的發布文件夾:

{sub_dirs, ["rel"]}

然后需要編譯一下項目:

rebar compile

如果沒有什么錯誤,那么就可以進行發布了:

rebar generate

如果在終端上沒有發現任何錯誤的話,那么就證明發布成功了。我們就可以來執行和測試我們的發布內容了。我們會發現在發布文件夾下,生成了一堆文件,在rel\myapp\bin 下面生成了一系列的bat文件,用來控制和操作應用的狀況,用法如下:

myapp [install|uninstall|start|stop|restart|console|ping|query|attach|upgrade]

myapp install:會安裝一個service到本地服務里,這樣你電腦啟動的時候這個節點就已經能夠執行了。

myapp uninstall:卸載這個服務

myapp start:啟動服務 stop:停止服務 restart:重啟服務

myapp console:用來啟動一個Erlang Shell來執行這個節點

后面幾個還沒用,等用過了,我再來補充這里的內容。

其它平台使用rebar

 

其它平台使用rebar,其實命令都是一樣的,只是在安裝的時候有一點點不一樣,還有就是可執行程序不一樣而已。大家有興趣可以自己試驗一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM