Rebar3使用介紹(一)基礎用法


本文基本都是按照rebar3官方文檔翻譯加上自己的理解整理而成,可能有紕漏,疑惑部分請查看原文訂正。

安裝


  • 使用源碼安裝
$ git clone https://github.com/erlang/rebar3.git
$ cd rebar3
$ ./bootstrap
  • 直接下載編譯好的二進制文件
$ wget https://s3.amazonaws.com/rebar3/rebar3 && chmod +x rebar3

如果要在windows下使用的話,需要額外製作一個rebar3.bat用來調用

@echo off
setlocal
set rebarscript=%~f0
escript.exe "%rebarscript:.cmd=%" %*

當然要求erlang環境,escript必須在path中,如果用過rebar,和以前的rebar.bat作用是一樣的,不過現在IDEA的erlang插件已經支持了,如果使用IDEA就不用通過腳本調用


加入到環境變量中

./rebar3 local install

後續更新,可以通過命令直接更新到最新穩定版本

rebar3 local upgrade

基礎用法


  • 創建一個新的app或者release
  • 加入deps依賴
  • 編譯
  • 輸出配置
  • 測試
  • 發佈

創建一個新的app或者release

rebar3推薦兩種主流方式管理項目:單個app結構的管理或者傘狀管理

單個app方式是根目錄中只有一個app,源代碼存放在src目錄,這種格式主要用來做庫,處於共享的目的,例如recon,雖然一般把這種目錄方式認爲成一個庫項目,但是這種結構還是可以發佈

傘狀項目的特點是包含了多個獨立的OTP app,通常位於apps/ 或者 lib/目錄中,這些app都可以有自己的rebar.config這種格式一般用於項目開發,項目可以擁有一個或多個主app,不一定只能有一個

rebar3提供了命令用來新建任意類型的模板,可通過rebar3 new <template> <project-name>命令調用。該<template>值可以是下面的任意值:

  • app: 具有監督樹和state維護的一個OTP application,作爲一個單獨的app
  • lib: 沒有監督樹的OTP application,一般用來將多個模塊組合起來作爲一個單獨的項目
  • release: 準備發佈的傘狀項目,比app項目多了config目錄下的sys.config,和vm.args,用來描述運行環境
  • escript: 一種基於app的項目,將來可以構建成escript腳本
  • plugin: 用於支持rebar3腳本

加入deps依賴

{deps, [
        {cowboy, "1.0.1"}, % package
        {cowboy, {git, "git://github.com/ninenines/cowboy.git", {tag, "1.0.1"}}} % alternatively, source
        ]
}.

上面兩種方式都可以獲取依賴,對於第二種,使用過rebar的同學應該很熟悉,變化並不大
對於第一種,是用hex管理的erlang庫完成的歸類,例如上面的cowboy,最後就是通過https://repo.hex.pm/tarballs/cowboy-1.0.1.tar 這種地址從已經歸類的服務端進行下載後管理的,至於hex的用法,比較複雜。如果想了解可以點這裏

總的來說,一般比較常用的庫hex都會有歸檔,不需要提供git倉庫地址,但是如果不配置就沒法完成的話,就得按照第二種格式配置上vsn地址了。當然也可以通過更新hex的歸檔目錄實現,不過吧,我只是猜可以,沒實踐過。。

rebar的老配置格式,例如{cowboy, ".*", {git, "git://github.com/ninenines/cowboy.git", {tag, "1.0.1"}}}這種在rebar3也是兼容的,但是第二個字段".*",會被忽略

添加完deps目錄後,記得將新加的application加入到你的主app的.app.src文件中,這樣就不用手動額外進行application調用了

編譯

和rebar一樣,在項目的根目錄下執行rebar compile就可以完成編譯,不過和rebar不同的是,使用rebar我們得先執行rebar get-deps先主動獲取依賴才行,rebar3不需要直接執行compile即可,而且可以保證deps目錄是最新的,即使deps庫有了變更。

輸出配置

默認的輸入目錄爲_build目錄,和rebar不同

  • _build
    • default
      • lib
        • cowboy
        • cowlib
        • ranch

測試

測試用例默認是存放在test/目錄下,eunit允許按照模塊組織打包目錄存放
如果測試用例需要額外的依賴,可以做單獨配置,只有在運行測試用例的時候才getdeps指定依賴

{profiles, [
   {test, [
       {deps, [
           {meck, {git, "git://github.com/eproxus/meck.git", {tag, "0.8.2"}}}
       ]}
   ]}
]}.

現在第一次調用rebar3 ct 會更新meck到_build/test/lib/.下,但是不會被加到rebar.lock文件中

發佈

rebar3使用relx進行構建
可以使用rebar3 new release myrel 直接新建一個發佈目標,該項目的rebar.config就會有一個推薦的relx配置如下

{relx, [{release, {myrel, "0.0.1"},
         [myrel]},

        {dev_mode, true},
        {include_erts, false},

        {extended_start_script, true}
       ]
}.

{profiles, [
    {prod, [{relx, [{dev_mode, false},
                    {include_erts, true}]}
     ]}
]}.

你可以將上面的內容複製到你的rebar.config中,當然記得將myrel該成你自己的項目,就可以調用rebar3 release 進行發佈

由於默認配置dev_mode爲true,那麼_build/rel/myrel/lib是符號連接_build/lib和apps/myrel。因此,在開發和重新編譯應用程序時,您無需重新創建發行版,只需重新啓動節點或重新加載模塊即可。

使用命令rebar3 as prod tar 可以將發佈的文件打包成tar包方便拷貝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章