文档章节

rebar3文档翻译—配置

影狼
 影狼
发布于 2017/02/16 13:12
字数 2395
阅读 177
收藏 0
点赞 0
评论 0
  1. 全局(所有命令)配置
    1. rebar3支持一些会影响批发工具行为的选项,这些被定义为操作系统环境变量,如下所示:
    2. REBAR_PROFILE="term"         # force a base profile
      HEX_CDN="https://..."        # change the Hex endpoint for a private one
      REBAR_CONFIG="rebar3.config" # changes the name of rebar.config files
      QUIET=1                      # only display errors
      DEBUG=1                      # show debug output
      REBAR_COLOR="low"            # reduces amount of color in output if supported
  2. 工件
    1. 工件是一个文件列表,这些文件是成功编译之后需要存在的文件(包括任何编译钩子)而不是erlang模块。这对于让rebar3找出是否成功构建了一些非Erlang工件的依赖项非常有用。其中可用的示例包括标识为共享库,渲染模板构建的C代码,或正确生成escript。
    2. 如果发现一个依赖已经被构建(意味着它的.app文件的模块列表匹配其.beam文件并且其所有工件已经存在),则在随后的rebar3运行期间将不会有编译提供者或其钩子被调用。
    3. {artifacts, [file:filename_all()]}.
    4. 路径是相对的,取决于它是否定义在一些项目的顶层。例如,如果我们有一个项目my_project,其中包含apps/my_app/下的项目应用程序my_app,我们构建一个escript,然后告诉rebar3不要在my_project/rebar.config中考虑项目"有效",因为它是项目顶层的rebar.config,工件将相对于profile_dir,默认情况下是_build/default/:
      1. {escript_name, rebar3}.
        {provider_hooks, [{post, [{compile, escriptize}]}]}.
        {artifacts, ["bin/rebar3"]}.
    5. 如果它不是一个顶层,但my_app是顶层目录,在rebar.config中定义的工件是相对于应用程序的输出目录,在这种情况下是_build/default/lib/my_app/,但我们可以使用一个模板来定义它来自profile_dir
      1. {escript_name, rebar3}.
        {provider_hooks, [{post, [{compile, escriptize}]}]}.
        {artifacts, ["{{profile_dir}}/bin/rebar3"]}.
    6. 在下表中列出了所有可用的模板键
      1. Template Key       Description
        1. profile_dir            The base output directory with the profile string appended, default: _build/default/.
        2. base_dir               The base output directory, default: _build.
        3. out_dir                 The application's output directory, default: _build/default/lib/<application>/.
    7. 另一个示例是在覆盖中使用工件,在本例中为eleveldb:
      1. {overrides,
         [{override, eleveldb, [{artifacts, ["priv/eleveldb.so"]},
                                ...
                               ]
          }]}.
      2. 工件实在应用程序eleveldb中定义的,因此它相对于输出目录,意味着上面使用的路径与使用"{{out_dir}}/priv/eleveldb.so"相同
  3. 编译
    1. 编译器选项可以使用erl_opts设置,可用的选项被列举在erlang编译模块的文档中。
      1. {erl_opts, []}
    2. 此外还可以设置平台特定的选项
      1. {erl_opts, [{platform_define,
                       "(linux|solaris|freebsd|darwin)",
                       'HAVE_SENDFILE'},
                      {platform_define, "(linux|freebsd)",
                        'BACKLOG', 128},
                      {platform_define, "R13",
                        'old_inets'}]
        }.
    3. 一个单独的选项可以设置一个模块编译在其他模块之前
      1. {erl_first_files, ["src/mymodule.erl", "src/mymodule.erl"]}.
    4. 还有一些其他的经常用到的选项
      1. {validate_app_modules, true}. % Make sure modules in .app match those found in code
        {app_vars_file, undefined | Path}. % file containing elements to put in all generated app files
        %% Paths the compiler outputs when reporting warnings or errors
        %% relative (default), build (all paths are in _build, default prior
        %% to 3.2.0, and absolute are valid options
        {compiler_source_format, relative}.
    5. 其他与erlang相关的编译器以及它们自己的配置选项
      1. Leex compiler with {xrl_opts, [...]}
      2. SNMP MIB Compiler with {mib_opts, [...]}
      3. Yecc compiler with {yrl_opts, [...]}
  4. 普通测试
    1. {ct_first_files, [...]}. % {erl_first_files, ...} but for CT
      {ct_opts, [...]}. % same as options for ct:run_test(...)
      {ct_readable, true | false}. % disable rebar3 modifying CT output in the shell
    2. ct_opts的常见测试选项的参考:http://www.erlang.org/doc/man/ct.html#run_test-1
  5. Cover
    1. 使用{cover_enabled, true}在测试中启用代码覆盖分析,然后cover提供了可以在测试之后显示报告的功能。选项{cover_opts, [verbose]}用于强制将覆盖报告打印到终端,而不仅仅打印到文件中。通过在配置文件中添加{cover_excl_mods, [Modules]},可以将特定模块从代码覆盖列入黑名单。应用程序可以使用{cover_excl_apps, [AppNames]}选项作为一个整体被列入黑名单。
  6. Dialyzer
    1. -type warning() :: no_return | no_unused | no_improper_lists | no_fun_app | no_match | no_opaque | no_fail_call | no_contracts | no_behaviours | no_undefined_callbacks | unmatched_returns | error_handling | race_conditions | overspecs | underspecs | specdiffs

      {dialyzer, [{warnings, [warning()]},
                  {get_warnings, boolean()},
                {plt_apps, top_level_deps | all_deps} % default: top_level_deps
                  {plt_extra_apps, [atom()]},
                  {plt_location, local | file:filename()},
                  {plt_prefix, string()},
                  {base_plt_apps, [atom(), ...]},
             {base_plt_location, global | file:filename()},
             {base_plt_prefix, string()}]}.
    2. 有关抑制模块中的警告信息,请参阅透析器文档中的请求或抑制文件中的警告的部分。
  7. Distribution
    1. 多个提供者和插件可能需要支持分布式erlang。通常,这样的所有命令(例如ct和shell)的配置都类似于一下配置值:
      1. {dist_node, [
            {setcookie, 'atom-cookie'},
            {name | sname, 'nodename'},
        ]}.
  8. Directories
    1. 目录有以下选项:下面的值是默认值
      1. %% directory for artifacts produced by rebar3
        {base_dir, "_build"}.
        %% directory in '<base_dir>/<profile>/' where deps go
        {deps_dir, "lib"}.
        %% where rebar3 operates from; defaults to the current working directory
        {root_dir, "."}.
        %% where checkout dependencies are to be located
        {checkouts_dir, "_checkouts"}.
        %% directory in '<base_dir>/<profile>/' where plugins go
        {plugins_dir, "plugins"}.
        %% directories where OTP applications for the project can be located
        {project_app_dirs, ["apps/*", "lib/*", "."]}.
        %% Directories where source files for an OTP application can be found
        {src_dirs, ["src"]}.
        %% Paths to miscellaneous Erlang files to compile for an app
        %% without including them in its modules list
        {extra_src_dirs, []}. 
        %% Paths the compiler outputs when reporting warnings or errors
        %% relative (default), build (all paths are in _build, default prior
        %% to 3.2.0, and absolute are valid options
        {compiler_source_format, relative}.
    2. 此外,rebar3将一些配置数据存储在~/.config/rebar3中,并且缓存一些数据到~/.cache/rebar3中。两者都可以通过指定{global_rebar_dir, "./some/path"}来覆盖。
  9. EDoc
    1. edoc支持的所有选项都可以放在{edoc_opts, [...]}。
  10. Escript
    1. 完整的详细信息在 escriptize命令中,例如下面的配置值。
    2. {escript_main_app, AppName}. % specify which app is the escript app
      {escript_name, "FinalName"}. % name of final generated escript
      {escript_incl_apps, [App]}. % apps (other than the main one and its deps) to be included
      {escript_emu_args, "%%! -escript main Module\n"}. % emulator args
      {escript_shebang, "#!/usr/bin/env escript\n"}. % executable line
      {escript_comment, "%%\n"}. % comment at top of escript file
    3. 由于escript构建的结构,顶级rebar.config文件中的选项只用于构建一个escript。
  11. EUnit
    1. {eunit_first_files, [...]}. % {erl_first_files, ...} but for CT
      {eunit_opts, [...]}. % same as options for eunit:test(Tests, ...)
      {eunit_tests, [...]}. % same as Tests argument in eunit:test(Tests, ...)
    2. EUnit选项引用: http://www.erlang.org/doc/man/eunit.html#test-2
  12. 最小OPT版本
    1. 可以指定Erlang/OTP的最低版本,如果使用早期版本构建应用程序,则会导致构建失败。
    2. {minimum_otp_vsn, "17.4"}.
  13. Overrides
    1. 覆盖允许从更高级别的应用程序修改依赖性的配置。它们旨在允许快速修复和解决办法,如果可能的话,我们建议致力于永久修复以使其成为目标应用程序的配置。
    2. 覆盖有3种风格:添加,覆盖应用程序和覆盖所有。
    3. {overrides, [{add, app_name(), [{atom(), any()}]},
                   {override, app_name(), [{atom(), any()}]},
                   {override, [{atom(), any()}]}]}.
    4. 有一些应用到依赖关系,依赖关系也可以具有它们应用的自己的覆盖。在所有的覆盖,每个应用程序覆盖按顺序添加。
    5. 例如,这可以用于强制所有的依赖关系在默认情况下使用debug_info编译,生产配置文件中强制使用no_debug_info。‘
    6. {overrides, [{override, [{erl_opts, [debug_info]}]}]}.
                   
      {profiles, [{prod, [{overrides, [{override, [{erl_opts,[no_debug_info]}]}]},
                          {relx, [{dev_mode, false},
                                  {include_erts, true}]}]}
                 ]}.
  14. Hooks
    1. 有两种类型的钩子:shell钩子和提供者钩子。它们都适用于提供者的相同类型。
    2. Shell Hooks
      1. 钩子提供了一种在hookable之前或之后运行任意命令的方法,随意的首先匹配系统类型选择运行哪个钩子,shell钩子在提供者钩子之后运行。
      2. -type hook() :: {atom(), string()}
                      | {string(), atom(), string()}.

        {pre_hooks, [hook()]}.
        {post_hooks, [hook()]}.
      3. 一个使用rebar3利用pre_hooks构建merl的例子:
        1. {pre_hooks, [{"(linux|darwin|solaris)", compile, "make -C \"$REBAR_DEPS_DIR/merl\" all -W test"},
                       {"(freebsd|netbsd|openbsd)", compile, "gmake -C \"$REBAR_DEPS_DIR/merl\" all"},
                       {"win32", compile, "make -C \"%REBAR_DEPS_DIR%/merl\" all -W test"},
                       {eunit, "erlc -I include/erlydtl_preparser.hrl -o test test/erlydtl_extension_testparser.yrl"},
                       {"(linux|darwin|solaris)", eunit, "make -C \"$REBAR_DEPS_DIR/merl\" test"},
                       {"(freebsd|netbsd|openbsd)", eunit, "gmake -C \"$REBAR_DEPS_DIR/merl\" test"},
                       {"win32", eunit, "make -C \"%REBAR_DEPS_DIR%/merl\" test"}
                      ]}.
    3. Provider Hooks
      1. 提供者也可以用作钩子。以下钩子在编译运行之前运行了clean。为了在命名空间中执行命令,使用一个元组作为第二个参数。提供者钩子在shell钩子之前运行。
      2. {provider_hooks, [{pre, [{compile, clean}]}
                          {post, [{compile, {erlydtl, compile}}]}]}
    4. 提供者的可挂钩点
      1. 只有特定的内置提供者支持附加到它们的钩子。控制取决于提供者是否操作项目的应用程序(每个应用程序和依赖项)或者是否期望它仅仅广泛的运行整个项目。
      2. 提供者钩子运行在shell钩子之前。
      3. Hook            before and after
        1. clean             each application and dependency, and/or before and after all top-level applications are compiled*
        2. ct                   the entire run
        3. compile         each application and dependency, and/or before and after all top-level applications are compiled*
        4. edoc              the entire run
        5. escriptize      the entire run
        6. eunit              the entire run
        7. release           the entire run
        8. tar                  the entire run
        9. erlc_compile  compilation of the beam files for an app
        10. app_compile  building of the .app file from .app.src for an app
      4. 默认情况下,这些钩子为每个程序运行,因为依赖关系可以在自己的上下文中指定自己的钩子。区别在于,某些情况下(不是顶层应用程序),钩子可以在许多级别上定义(省略覆盖)
        1. rebar.config位于应用程序根目录下
        2. 每个顶级应用程序(在apps/或者libs/)rebar.config
        3. 每个依赖项的rebar.condig
      5. 默认情况下,没有顶级应用程序时,在顶层rebar.config中定义的钩子被归属于顶层应用程序的一部分,这允许钩子在以后发布的时候继续为依赖程序工作。
      6. 然而,如果钩子在具有顶层应用程序的项目根目录的rebar.config中定义,钩子将在所有顶级应用程序的任务运行之前/之后运行。
      7. 要在一个顶级项目中保留每个应用程序的行为,必须在每个应用程序的rebar.config中定义钩子。
  15. Relx
    1. 请查看Releases
  16. Shell
    1. 如果找到relx条目,rebar3 shell REPL将自动引导应用程序
    2. 其他选项包括:
      1. Option          Value         Description
        1. apps          [app1, app2, ...]          Applications to be booted by the shell. Overtakes the relx entry values
        2. config        "path/to/a/file.config"           Loads a .config file (such as sys.config) for the applications to be booted by the shell.
        3. script_file          "path/to/a/file.escript"         Evaluates a given escript before booting the applications for a node.
  17. XRef
    1. {xref_warnings,false}.
      {xref_extra_paths,[]}.
      {xref_checks,[undefined_function_calls,undefined_functions,locals_not_used,
                    exports_not_used,deprecated_function_calls,
                    deprecated_functions]}.
      {xref_queries,[{"(xc - uc) || (xu - x - b - (\"mod\":\".*foo\"/\"4\"))", []}]}.

© 著作权归作者所有

共有 人打赏支持
影狼
粉丝 8
博文 92
码字总数 45561
作品 0
海淀
程序员
rebar3的一些参考文档

刚使用rebar3,功能太多,各种命令不会用。网上找了一些资料: rebar3的官网,有指定的文档,命令例子都有,入门必备: rebar官网 然后使用流程介绍,这里介绍了一些使用案例和为什么这样做的...

格通 ⋅ 2016/03/25 ⋅ 0

收藏的博客 -- erlang学习

一、技术博客 http://blog.csdn.net/erlib 为什么我要选择erlang+go进行服务器架构(1) 为什么我要选择erlang+go进行服务器架构(2) http://www.qingliangcn.org/ https://github.com/qinglian...

libaineu2004 ⋅ 2017/09/14 ⋅ 0

【读书笔记】"Erlang In Anger" Erlang应用的错误调试

全书 封面不明觉厉 这本书很薄,只有93页,而且是免费的,有兴趣的朋友可以去看一看。虽然书中没有提到Elixir,但对于学习Elixir也很有帮助。这本书适合对Erlang和OTP有初步了解的人阅读。书...

ljzn ⋅ 2016/09/26 ⋅ 1

leeyi/es_client

es_client An OTP application wget https://s3.amazonaws.com/rebar3/rebar3 && chmod +x rebar3 Build $ rebar3 compile Build and Run (In Erlang/OTP 20) Erlang/OTP 20 [erts-9.0] [sou......

leeyi ⋅ 2017/09/13 ⋅ 0

为了方便发布tar,rebar3要适应relx迁移include目录到src目录

使用rebar3打tar包,十分方便。其中rebar3使用relx打包,relx里面有下面的选项,可以在打包的时候,不打包src目录,方便在发布的时候,不发布src里面的源码文件: 参考:relx Configuration ...

格通 ⋅ 2016/09/30 ⋅ 0

rebar3发布,归属权更新到erlang团队了

rebar3的beta 4发布很久了,一直奇怪为啥没有发布3.0稳定版。今天一看,不但发布了3.0 stable版本,而且github的地址也改了,由github.com/rebar/rebar3 改为 github.com/erlang/rebar3 了,...

格通 ⋅ 2016/03/15 ⋅ 0

rebar3使用relx打包了

rebar3: https://github.com/erlang/rebar3 relx: http://github.com/erlware/relx relflox: http://github.com/RJ/relflow rebar3不使用reltool了,转用relx了。 No ReltoolReltool is out......

格通 ⋅ 2016/03/23 ⋅ 0

rebar3 shell使用

参考:rebar3 shell 使用rebar3开发时,使用--name参数: rebar3 shell --name=a@192.168.1.1 使用--sname参数 rebar3 shell --sname=a --sname不需要添加ip域名。...

格通 ⋅ 2016/03/30 ⋅ 0

我的Pycharm,我做主

  之间花了一周多的时间把Pycharm官方帮助文档翻译了一遍,一共43篇博客,累得要屎,感悟颇多。   发牢骚之前先总结点干货,这里把所有的翻译文档列成如下目录,方便大家索引:   最全...

u013088062 ⋅ 2015/12/23 ⋅ 0

Cowboy的使用

使用rebar3创建erlang项目 修改rebar.config 创建conf文件夹 在conf下创建vm.args和sys.config文件 vm.args sys.config 修改src/test_cowboy.app.src 修改src/testcowboysup.erl 新建src/tes......

影狼 ⋅ 2017/12/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

IDEA创建SpringMVC+Mybatis+Maven项目

视频如下(加载有点慢请见谅,服务器不太好): 视频

影狼 ⋅ 刚刚 ⋅ 0

前阿里P8架构师:精准定制Java架构师学习计划!

可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。 有不少朋友问,除了掌握J...

java高级架构牛人 ⋅ 3分钟前 ⋅ 0

zookeper学习

https://blog.csdn.net/u012152619/article/category/6470028

~少司命~ ⋅ 4分钟前 ⋅ 0

Spring MVC ,JSON,JQuery,不懂JQuery,跳过了

/spring-mvc-study/src/main/webapp/course_json.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD ......

颖伙虫 ⋅ 4分钟前 ⋅ 0

2018上海云栖大会workshop-日志数据采集与分析对接

摘要: 日志数据采集与分析对接 课程描述 通过日志服务采集用户、数据库、业务等访问数据。演示对于业务日志分析与处理,程序日志查询与监控,打通日志与数据仓库对接案例。 日志种类 网站访...

阿里云云栖社区 ⋅ 5分钟前 ⋅ 0

mahout demo

package com.datamine.CollaborativeFiltering.mysql; import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood; import org.apache.mahout.cf.taste.impl.recommend......

xiaomin0322 ⋅ 6分钟前 ⋅ 0

red hat openstack 12配置要求

安装 openstack 之前,一般要规划整个系统中,到底要多少台机器来参与openstack, 根据rhosp12的官方文档: 最低要求是3台物理机,1台作为director,一台作为 controller ,一台作为computer....

tututu_jiang ⋅ 8分钟前 ⋅ 0

Rocket-Chip在GitHub上的各个源码

在github上通过搜索Rocket-chip可以得到36个结果:其中 https://github.com/freechipsproject/rocket-chip https://github.com/ucb-bar/riscv-boom https://github.com/ucb-bar/fpga-zynq (......

whoisliang ⋅ 13分钟前 ⋅ 0

【HAVENT原创】CentOS 6.5 下 Nginx 的安装与配置

nginx是轻量级的Web服务器、反向代理服务器及邮件服务器,具有占用内存少,并发能力强的优点,已被广泛应用。本文介绍目前最新版本 1.12.2 的安装。 各版本nginx下载地址:http://nginx.org/...

HAVENT ⋅ 19分钟前 ⋅ 0

查看linux系统重启之前的log -- last_kmsg

当 Linux Kernel 出现 BUG 的时候,后走入 panic flow,这个时候由于 Kernel 出现了严重的问题,adbd 也无法响应 adb 连接请求,这个时候想透过读取 Kernel Log Buffer 来看 Kernel Log 是不...

zyzzu ⋅ 20分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部