Erlang Rebar 使用指南之一:入门篇
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 使用指南之一:入门篇的更多相关文章
- Erlang Rebar 使用指南之四:依赖管理
Erlang Rebar 使用指南之四:依赖管理 全文目录: https://github.com/rebar/rebar/wiki 本章链接: https://github.com/rebar/re ...
- Erlang Rebar 使用指南之三:Rebar和OTP程序约定和命令
Erlang Rebar 使用指南之三:Rebar和OTP程序约定和命令 全文目录: https://github.com/rebar/rebar/wiki 本章位置: https://github. ...
- Erlang Rebar 使用指南之二:制作发布版本
Erlang Rebar 使用指南之二:制作发布版本 全文目录: https://github.com/rebar/rebar/wiki 本章位置: https://github.com/rebar/ ...
- Java工程师学习指南(入门篇)
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- 《Ossim应用指南》入门篇
Ossim应用入门 --在<OSSIM在企业网络管理中的应用>http://chenguang.blog.51cto.com/350944/802007 这篇文章发布之后,很多同行对oss ...
- 【OpenCV入门指南】第一篇 安装OpenCV
http://blog.csdn.net/morewindows/article/details/8225783/ win10下vs2015配置Opencv3.1.0过程详解(转) http://ww ...
- Java工程师学习指南 入门篇
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- ant使用指南详细入门教程
这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...
随机推荐
- Android事件分发传递回传机制详解
转载本专栏每一篇博客请注明转载出处地址,尊重原创.此博客转载链接地址:点击打开链接 http://blog.csdn.net/qq_32059827/article/details/5257701 ...
- Dynamics CRM2015 页面导航栏顶部全局快速查找功能配置
在CRM2015中微软加入了新的快速查找功能,让你的数据查找更加方便,功能栏如下图所示,直接可以框中输入搜索项进行搜索. 但该功能是需要进行些配置,具体的配置在设置-管理-系统设置中,默认的就是红框中 ...
- nfc开发
很多Android设备已经支持NFC(近距离无线通讯技术)了.本文就以实例的方式,为大家介绍如何在Android系统中进行NFC开发. Android NFC开发环境 使用硬件:Google Nexu ...
- (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用plist列表文件来表示游戏数据 因为在这个炸弹人游戏中有很多 ...
- 【一天一道LeetCode】#206. Reverse Linked List
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Reverse ...
- 为何写flash的时候要地址左移一位?
代码一: #define Writeflash(addr,dat) *((volatile INT16U *)(addr<<1))=(INT16U)dat #define Readflas ...
- Android进阶(四)一个APP引发的思索之ArrayList的add总是添加相同的值
解决"ArrayList的add总是添加相同的值"问题 前言 最近在写一个小的Android APP,在用ArrayList的add时,总是出现添加相同值的现象.如下图所示: 错误 ...
- Mybatis执行BatchExecutor(四)
BatchExecutor:顾名思义就是进行批量操作,通过批量操作来提高性能 public class BatchExecutor extends BaseExecutor { public stat ...
- android scrollview嵌套listview计算高度的问题
ScrollView中只能放一个控件,一般都放LinearLayout,orientation属性值为vertical.在LinearLayout中放需要呈现的内容.ListView也在其中,List ...
- 并发编程(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题
boost的mutex,condition_variable非常好用.但是在Linux上,boost实际上做的是对pthread_mutex_t和pthread_cond_t的一系列的封装.因此通过对 ...