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

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

安裝rebar

 

你能夠在 https://github.com/rebar/rebar裏下載zip包或者源代碼本身編譯。node

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

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

 

用Rebar構建項目

 

首先你要建立一個你的工做目錄。而後把剛纔生成的兩個文件Copy到你的工做目錄下面,或者若是你已經添加了系統變量,則不須要。bootstrap

咱們這裏創建一個工做路徑D:\myapp,而後執行下面的命令來建立一個Erlang項目,項目的名稱叫作myapp架構

rebar create-app appid=myappapp

這條命令會建立一個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,其實命令都是同樣的,只是在安裝的時候有一點點不同,還有就是可執行程序不同而已。你們有興趣能夠本身試驗一下。

相關文章
相關標籤/搜索