Erlang Rebar 使用指南之一:入门篇

全文目录:

https://github.com/rebar/rebar/wiki

本章原文:

https://github.com/rebar/rebar/wiki/Getting-started

Rebar 是功能丰富的 Erlang 构建工具。用于Erlang/OTP项目的编译,测试,依赖管理,打包发布等。

Rebar 是自包含的脚本,可以方便地嵌入到项目中。

1 编译 rebar

    $ git clone git://github.com/rebar/rebar.git
    $ cd rebar
    $ ./bootstrap

查看命令说明:

    $ ./rebar -c
    $ ./rebar help clean

2 入门例子

2.1 创建一个程序目录

    $ mkdir myapp
    $ cd myapp

把 “1 编译 rebar” 得到的 rebar 复制到myapp目录中

    $ cp ../rebar/rebar .

2.2 创建第一个rebar项目

    $ ./rebar create-app appid=myapp
    $ touch rebar.config

上面命令执行后,在myapp/src生成了3个文件:
  myapp.app.src - OTP应用资源
  myapp_app.erl - 一个实现 OTP application behaviour
  myapp_sup.erl - 最顶层的 OTP Supervisor behaviour
 

2.3 编译项目

    $ ./rebar compile

上面命令执行后,生成ebin目录,包含与src/erl文件对应的.beam文件.
  src/myapp.app.src 生成 ebin/myapp.app

  清理项目

    $ ./rebar clean

2.4 测试项目

Rebar 支持 EUnit和Common Test测试框架。给项目增加 EUint 单元测试,  增加下面的代码到
  src/myapp_app.erl:

-export([start/2, stop/1]). 后面添加:

    %% eunit testing
    -ifdef(TEST).
    -include_lib("eunit/include/eunit.hrl").
    -endif.

在文件末尾添加:

    %% eunit testing
    -ifdef(TEST).

    simple_test() ->
        ok = application:start(myapp),
        ?assertNot(undefined == whereis(myapp_sup)).

    -endif.

ifdef 宏指示测试阶段代码,不会编译进产品中。
  开始编译和测试:

    $ ./rebar compile eunit

上面的命令将编译2次,一次输出到ebin/,一次输出到.eunit/:
    ==> myapp (compile)
    Compiled src/myapp_app.erl
    Compiled src/myapp_sup.erl
    ==> myapp (eunit)
    Compiled src/myapp_sup.erl
    Compiled src/myapp_app.erl
      Test passed.

    =INFO REPORT==== 30-Nov-2014::03:50:01 ===
        application: myapp
        exited: killed
        type: temporary
 

2.5 测试代码覆盖率统计

在myapp/rebar.config中加入下面的行:

    {cover_enabled, true}.

再次运行:

    $ rebar compile eunit

生成的统计页面在:.eunit/index.html

Erlang Rebar 使用指南之一:入门篇的更多相关文章

  1. Erlang Rebar 使用指南之四:依赖管理

    Erlang Rebar 使用指南之四:依赖管理 全文目录: https://github.com/rebar/rebar/wiki 本章链接: https://github.com/rebar/re ...

  2. Erlang Rebar 使用指南之三:Rebar和OTP程序约定和命令

    Erlang Rebar 使用指南之三:Rebar和OTP程序约定和命令 全文目录: https://github.com/rebar/rebar/wiki 本章位置: https://github. ...

  3. Erlang Rebar 使用指南之二:制作发布版本

    Erlang Rebar 使用指南之二:制作发布版本 全文目录: https://github.com/rebar/rebar/wiki 本章位置: https://github.com/rebar/ ...

  4. Java工程师学习指南(入门篇)

    Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  5. 《Ossim应用指南》入门篇

    Ossim应用入门 --在<OSSIM在企业网络管理中的应用>http://chenguang.blog.51cto.com/350944/802007 这篇文章发布之后,很多同行对oss ...

  6. 【OpenCV入门指南】第一篇 安装OpenCV

    http://blog.csdn.net/morewindows/article/details/8225783/ win10下vs2015配置Opencv3.1.0过程详解(转) http://ww ...

  7. Java工程师学习指南 入门篇

    Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  8. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  9. ant使用指南详细入门教程

    这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...

随机推荐

  1. nginx平台初识(二) 浏览器 HTTP 协议缓存机制详解

    1.缓存的分类 缓存分为服务端侧(server side,比如 Nginx.Apache)和客户端侧(client side,比如 web browser). 服务端缓存又分为 代理服务器缓存 和 反 ...

  2. String、StringBuffer、StringBuilder对比

    1.String 用于存放字符的数组被声明为final的,因此只能赋值一次,不可再更改.这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. Str ...

  3. ubuntu cpu频率控制

    安装cpufrequtils:  sudo apt-get install cpufrequtils 查看cpu:                 sudo cpufreq-info 设置cpu模式: ...

  4. Dynamics CRM 通过Odata创建及更新记录各类型字段的赋值方式

    CRM中通过Odata方式去创建或者更新记录时,各种类型的字段的赋值方式各不相同,这里转载一篇博文很详细的列出了各类型字段赋值方式,以供后期如有遗忘再次查询使用. http://luoyong0201 ...

  5. [ExtJS5学习笔记]第二十九节 sencha ext js 5.1.0中动态更换皮肤主题

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/42016107 本文作者:sushengmiyan ------------------ ...

  6. Java并发框架——公平性

    所谓公平性指所有线程对临界资源申请访问权限的成功率都一样,不会让某些线程拥有优先权.通过前面的CLH Node FIFO学习知道了等待队列是一个先进先出的队列,那么是否就可以说每条线程获取锁时就是公平 ...

  7. java linux 项目经常无故被关闭 进程无故消息

    布了几个项目.居然天天会自动的挂掉.急了.花时间解决了一下.总结方案如下: 1.磁盘满了.这大家都懂,清一下 2.tomcat在关闭的或是重启的时候,常常后台进程没有被关闭.需要用ps aux|gre ...

  8. Activity, Service,Task, Process and Thread之间的关系

    Activity, Service,Task, Process and Thread之间到底是什么关系呢? 首先我们来看下Task的定义,Google是这样定义Task的:a task is what ...

  9. pig 的chararry类型不能用比较运算符comparison operator

    pig 的chararry类型可能是按字段,逐个字段进行比较. element_id 是chararray类型, 语句: no_app_category_mapping = filter no_ele ...

  10. Socket编程实践(9) --套接字IO超时设置方法

    引:超时设置3种方案 1. alarm超时设置方法 //代码实现: 这种方式较少用 void sigHandlerForSigAlrm(int signo) { return ; } signal(S ...