Rebar3使用介绍(一)

  • 安装
  • 基础用法
    • 创建一个新的app或者release
    • 加入deps依赖
    • 编译
    • 输出配置
    • 测试
    • 发布

本文基本都是按照 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 rebar3.cmd用来调用

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

当然要求erlang环境,escript必须在path中,如果用过rebar,和以前的rebar.bat rebar.cmd作用是一样的,不过现在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包方便拷贝

Rebar3使用介绍(一)基础用法相关推荐

  1. rebar3使用介绍(三)命令

    rebar3使用介绍(三) as compile clean ct cover deps do dialyzer edoc escriptize eunit get-deps help new pat ...

  2. 【Python_Xpath学习笔记(一)】 Xpath选择器基础用法介绍

    Xpath选择器基础用法介绍 前言 此篇文章中介绍Xpath的定义和基本使用方法,特此记录用来加深印象,较为基础. 正文 1.Xpath简介 Xpath:XML Path Language - XML ...

  3. Pandas基础用法合集(中文官档)

    本节介绍 pandas 数据结构的基础用法.下列代码创建示例数据对象: In [1]: index = pd.date_range('1/1/2000', periods=8) In [2]: s = ...

  4. pandas object转float_数据分析篇 | Pandas基础用法6【完结篇】

    这是最后一篇,至此Pandas系列终于连载完了,有需要的也可以看看前面6篇,尽请收藏. 数据分析篇 | Pandas 概览 数据分析篇 | Pandas基础用法1数据分析篇 | Pandas基础用法2 ...

  5. dubbo官方文档中文_Pandas中文官方文档:基础用法5

    本文授权转载自Python大咖谈禁止二次转载 大家好,我是老表 阅读文本大概需要 16 分钟 建议从头开始学习,本系列前四篇 Pandas中文官方文档:基础用法1 Pandas中文官方文档:基础用法2 ...

  6. struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法

    笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...

  7. Pandas中文官档 ~ 基础用法1

    呆鸟云:"在学习 Python 数据分析的过程中,呆鸟发现直接看官档就是牛逼啊,内容全面.丰富.详细,而 Python 数据分析里最核心的莫过于 pandas,于是就想翻译 pandas 官 ...

  8. [系统安全] 四十四.APT系列(9)Metasploit技术之基础用法万字详解及防御机理

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  9. [系统安全] 四.OllyDbg动态分析工具基础用法及Crakeme逆向破解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

最新文章

  1. 【组队学习】【23期】Datawhale编程实践(区块链)
  2. spring--(4)级联属性赋值
  3. 启明云端分享|ESP32-C3阿里云连接测试
  4. python 麦克风人声检测_【录音技巧】如何为人声录音 ,防止喷麦
  5. php非,通过非数字和字符的方式实现PHP WebShell
  6. 信息学奥赛一本通 1112:最大值和最小值的差 | OpenJudge NOI 1.9 05
  7. html跳动的小球,canvas绘制跳动的小球
  8. python的scale方法的变体以及使用_Python with用法实例
  9. Modifier ‘public‘ is redundant for interface methods错误
  10. SHIFT后门拿服务器之方法总结
  11. 介绍一下ajax后最好的返回结果的方式#34;Json#34;
  12. mysql 80070057_返回E_INVALIDARG (0x80070057)
  13. grid@m3#39;s password: Permission denied, please try again.
  14. android app 短信接收,Android创建简单发送和接收短信应用
  15. Ceph的进阶使用(一)
  16. SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误
  17. 前端--鼠标跟随特效
  18. 基于面向对象 来写一个简单的贪吃蛇小游戏(代码可直接用)
  19. Python正则表达式排除指定字符串
  20. gis处理提示唯一值过多

热门文章

  1. Sublime的汉化教程
  2. FTP工作原理及内网用端口映射方式建FTP的注意事项
  3. ibm个人计算机 pc,1、IBM-PC机一词中,PC原意指( )。.doc
  4. [激光原理与应用-51]:《激光焊接质量实时监测系统研究》-2-激光焊接及其物理现象
  5. 良匠-手把手教你写NFT抢购软(四)
  6. SoundPool播放.mp3音频
  7. String.valueOf()方法的使用
  8. RT-Thread_rt_kprintf()打印浮点数(解决方法2:添加rt_vsnprintf_full)
  9. [股票预测]基于BP神经网络的股票行情预测
  10. 火狐浏览器开发者工具的一些使用方法