Erlang:Rebar3的简单使用

简介:

安装

方法一:源码安装
$ git clone https://github.com/erlang/rebar3.git
$ cd rebar3
$ ./bootstrap
方法二:点击「链接」直接下载

https://s3.amazonaws.com/rebar3/rebar3

方法三:直接从其他项目中拷贝

项目说明

新建项目命令
//1新建一个简单app项目
$ rebar3 new app <projName>
//2新建一个多app项目
$ rebar3 new release <projName>
//3新建一个简单app项目
$ rebar3 new lib <projName>
//4新建一个rebar插件
$ rebar3 new plugin <projName>
app项目结构
$> rebar3 new app projApp

├── LICENSE
├── README.md
├── rebar.config
└── src
    ├── projApp.app.src
    ├── projApp_app.erl
    └── projApp_sup.erl
release项目结构
$> rebar3 new release projRel

├── LICENSE
├── README.md
├── apps
│   └── projRel
│       └── src
│             ├── projRel.app.src
│             ├── projRel_app.erl
│             └── projRel_sup.erl
├── config
│   ├── sys.config
│   └── vm.args
└── rebar.config

PS:看文件目录就能大体看出,这两个的区别,app类型项目主要是简单的项目,而release项目多了个apps目录,此目录下可以有多个Erlang的application,可以处理复杂项目

lib项目
├── LICENSE
├── README.md
├── rebar.config
└── src
    ├── projLib.app.src
    └── projLib.erl
plugin项目

说明:代码格式与app相同,但它有一套它自己的实现方式,具体实现留到以后来做

编译运行

以上把新建这块大体说完了,下面以release类项目为实例,具体分析
执行

$> rebar3 compile

编译成功,会生成一个新文件夹_build

├── _build
│   └── default
│       └── lib
│           └── projRel
│               ├── ebin
│               │   ├── projRel.app
│               │   ├── projRel_app.beam
│               │   └── projRel_sup.beam
│               ├── include -> ../../../../apps/projRel/include
│               ├── priv -> ../../../../apps/projRel/priv
│               └── src -> ../../../../apps/projRel/src
文件目录说明
deps默认目录:
_build/default/lib
release默认目录:
_build/default/rel
test默认目录:
_build/test/lib

常见命令

//查看依赖树
$ rebar3 tree
//查看依赖 $ rebar3 deps
//release所有app
$ rebar release

//release指定app
$ rebar3 release -n <release_name>

//按指定配置release
$ rebar3 as prod tar 

配置文件实例

{erl_opts, [
  debug_info
  ,{i, "./include"}  % 指定include文件目录
  ,{d, 'NOTEST', true}   %
  ,{parse_transform, lager_transform}  %lager专用
 
]}.
 
% {deps_error_on_conflict, true}. // 增加这句,依赖有冲突时,会中止
{rebar_packages_cdn, "https://hexpm.upyun.com"}.  % package中国镜像
 
 
{plugins, [  %% 插件
  % .dtl格式文件插件
  {rebar3_erlydtl_plugin, ".*",
    {git, "https://github.com/tsloughter/rebar3_erlydtl_plugin.git", {branch, "master"}}}
]}.
 
 
{deps, [
  {apns,    {git, "git@github:zhaoweiguo/apns.git"}},
  {eredis, {git, "https://github.com/wooga/eredis.git", {tag, "v1.1.0"}}},
  {brod, {git, "https://github.com/klarna/brod.git", {tag, "3.4.0"}}}
  ... ...
]}.
 
{erlydtl_opts,[ % erlydtl插件相关配置
  {doc_root, "templates"}
  %,{compiler_options, [report, return, debug_info]}
]}.
{provider_hooks, [  %% hook钩子
  {pre, [{compile, {erlydtl, compile}}]}  % 执行rebar3 compile时先执行rebar3 plugin compile
]}.
 
 
 
{relx, [{
  release, {
    octopus, "0.1.0"
  },
  [octopus,
    ... ...
    sasl]},
 
  {sys_config, "./config/octopus.config"},
  {vm_args, "./config/vm.args"},
 
  {dev_mode, false}, % 开发模式
  {include_erts, false},  % 编译时是否包含erts库
%%  {exclude_modules, [{
%%    syntax_tools, [merl, merl_transform]
%%  }]},
 
  {extended_start_script, true}
]}.
 
{profiles, [{ % 配置相关,同一rebar.config可以生成多种不同版本,如release, default, debug等
  prod, [
    {
      erl_opts
%      ,[no_debug_info, warnings_as_errors]   % [注意]加此句,有warning不能通过
      ,[no_debug_info]
    },
    {relx, [
      {dev_mode, false},    % 用于修改上面relx顶层目录的配置
      {include_erts, true}
    ]}
  ]
}]
}.
目录
相关文章
|
Shell 网络架构
《cowboy 源代码分析第一部 (Erlang实现的http服务器)》
cowboy是基于ranch的http服务器。特点是功能强打(支持完整的http协议websocket,spdy等),简洁,轻量级。
《cowboy 源代码分析第一部 (Erlang实现的http服务器)》
|
缓存 JavaScript 前端开发
Vue3与Vue2生命周期对比:新特性解析与差异探讨
Vue3与Vue2生命周期对比:新特性解析与差异探讨
1158 3
|
缓存 负载均衡 安全
什么是反向代理
反向代理是一种部署在服务器前端的代理技术,它接收客户端请求并转发给内部服务器,对外隐藏真实服务器。其主要功能包括负载均衡、安全防护和缓存加速,有效提升服务器性能和安全性。
1679 5
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
11982 143
|
人工智能 编解码 自然语言处理
Aria-UI:港大联合 Rhymes AI 开源面向 GUI 智能交互的多模态模型,整合动作历史信息实现更加准确的定位
Aria-UI 是香港大学与 Rhymes AI 联合开发的多模态模型,专为 GUI 智能交互设计,支持高分辨率图像处理,适用于自动化测试、用户交互辅助等场景。
892 11
Aria-UI:港大联合 Rhymes AI 开源面向 GUI 智能交互的多模态模型,整合动作历史信息实现更加准确的定位
|
Linux Windows
一篇文章讲明白Erlang打包工具rebar安装使用
一篇文章讲明白Erlang打包工具rebar安装使用
332 0
|
消息中间件 存储 监控
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大的消息代理,用于分布式应用程序间的通信。它通过队列临时存储消息,支持异步通信和解耦。经典队列适合高吞吐量和低延迟场景,而仲裁队列则提供高可用性和容错能力,适用于关键任务系统。选择哪种队列取决于性能、持久性和容错性的需求。
1348 6
|
存储 监控 调度
Android系统服务:WMS、AMS相关知识
参考文献 Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析 Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析 Android窗口管理服务WindowManagerService对输入法窗口(Input Method Window)的管理分析 Android窗口管理服务WindowManagerService显示窗口动画的原理分析
|
监控 安全 网络安全
接口频繁请求,被刷爆怎么办
接口频繁请求,被刷爆怎么办
|
Linux KVM 虚拟化
10-25|我只想可以修改容器内的时间而不影响外部时间怎么办啊
10-25|我只想可以修改容器内的时间而不影响外部时间怎么办啊

热门文章

最新文章