rebar3使用介绍(六)用户自定义文件配置

rebar3使用介绍(六)用户自定义文件配置rebar3 使用介绍 五 用户自定义文件配置例子选项合并算法依赖和配置文件依赖永远按照 prod 模式对应的 profile 进行编译 不会有其他 当然不包括 default 任何东西会被额外的套用上来 即使它们是为 prod 依赖项配置的 仍然会将其提取到其声明的配置文件的配置文件目录中 例如 顶层的依赖关系 deps 将放在 build default lib 下 test 将放在 build test li

rebar3使用介绍(五)用户自定义文件配置

rebar3使用配置文件的概念来满足这些要求。配置文件是一组配置设置,仅在这些特定上下文之一中使用,覆盖或补充常规配置。他们的目标是能够支持多个开发用例,同时保持可重复性,而无需外部工具或环境值来完成这项工作。

可以通过三种不同方式指定运行的配置文件:

  1. 修改REBAR_PROFILE环境变量
  2. 使用 rebar3 as <profile> <command>rebar3 as <profile1>,<profile2> <command>
  3. 特殊的rebar3命令,例如ct和eunit总是会添加test项的配置内容

任何这些形式(甚至是所有这些形式)都会让rebar3知道它应该作为特殊配置文件之一运行并相应地修改其配置。

可以在主rebar.config文件中指定配置文件配置:

{profiles, [{ProfileName1, [Options, ...]}, {ProfileName2, [Options, ...]}]}. 

例如,meck仅为测试运行添加依赖关系的测试配置文件可以定义为:

{profiles, [{test, [{deps, [meck]}]}]}. 

任何配置值都可以包含在配置文件中,包括插件,编译器选项,发行选项等。

例子

更完整的示例如下所示:

{deps, [...]}. {relx, [ ... ]}. {profiles, [ {prod, [ {erl_opts, [no_debug_info, warnings_as_errors]}, {relx, [{dev_mode, false}]} ]}, {native, [ {erl_opts, [{native, o3}]} ]}, {test, [ {deps, [meck]}, {erl_opts, [debug_info]} ]} ]}. 

因此,这样一个项目有四个不同的模式:

  1. default, 所有执行模式下的基础配置,对应于整个rebar.config中的配置
  2. prod, 生产环境,可能会去掉符号链接,或者加入更严格的编译检查之类
  3. native, 强制使用HiPE进行编译,以获得更快的数学代码
  4. test,它可以加载模拟库,并允许在测试运行期间将调试信息保存在文件中。

这些可能在很多场景下结合在一起。以下是示例运行:

  1. rebar3 ct:将运行项目的常见测试套件。按顺序,应用的配置文件将是default,然后test,因为ct要求使用test配置文件。
  2. rebar3 as test ct:将像以前一样运行。配置文件不会重复应用多次。
  3. rebar3 as native ct:将以纯本地运行测试。配置文件的顺序是’default’,然后是’native’,最后是’test’(最后由命令运行指定)。
  4. rebar3 as test,native ct:将与上述相同。在应用配置文件时,rebar3首先将它们全部展开,然后按正确的顺序应用它们。所以为了在这里会default,然后test,然后native,然后test再次(因为的ct命令)。由于配置文件可应用于idempotently,这仅相当于调用rebar3 as native ct。
  5. rebar3 release 将仅作为default配置文件构建版本。
  6. rebar3 as prod release 将使用更严格的编译器选项来构建没有开发模式的版本。
  7. rebar3 as prod, native release 将使用最后一个命令构建发行版,但同时还将模块编译为本机模式。
  8. rebar3 as prod release而REBAR_PROFILE=native在环境中将像上一个命令一样构建发布,但native将在prod之前应用。

因此,配置文件的应用顺序如下:

  1. default
  2. REBAR_PROFILE值,如果有的话
  3. as命令行部分中指定的配置文件
  4. 每个命令指定的配置文件

通常,配置文件因此应该是可组合的,用于配置要使用的配置子集。

依赖锁定

选项合并算法

尝试自动合并所有配置选项通常很棘手。不同的工具或命令会以不同的方式期望它们,或者将lists of tuples, proplists, key/value pairs转换为某种字典。

为了支持尽可能最通用的形式,rebar3将它们作proplists 和 tuple lists的松散组合来处理。这意味着以下选项都被视为具有密钥native

  • native
  • {native, o3}
  • {native, still, supported}

即使其中一些工具可能支持也可能不支持。例如,Erlang编译器支持将宏定义为{d, 'MACRONAME'}或者{d, 'MACRONAME', MacroValue},但单独的d不行,而它确实支持native{native, o3}

rebar3正确支持所有这些表单并以功能方式合并它们。我们以下面的配置文件为例:

{profiles, [ {prod, [ {erl_opts, [no_debug_info, warnings_as_errors]}, ]}, {native, [ {erl_opts, [{native, o3}, {d, 'NATIVE'}]} ]}, {test, [ {erl_opts, [debug_info]} ]} ]}. 

以不同的顺序调用这些配置将生成不同的erl_opts列表:

  • rebar3 as prod,native,test <command>: [debug_info, {d, ‘NATIVE’}, {native, o3}, no_debug_info, warnings_as_errors]
  • rebar3 as test,prod,native <command>: [{d, ‘NATIVE’}, {native, o3}, no_debug_info, warnings_as_errors, debug_info]
  • rebar3 as native,test,prod <command>: [no_debug_info, warnings_as_errors, debug_info, {d, ‘NATIVE’}, {native, o3}]
  • rebar3 as native,prod,test <command>: [debug_info, no_debug_info, warnings_as_errors, {d, ‘NATIVE’}, {native, o3}]

请注意,应用的最后一个配置文件会生成列表中的第一个元素,并且每个配置文件列表中的元素将根据其键进行排序。

这将允许rebar3命令以正确的顺序拾取元素,同时仍然支持需要许多元素共享相同键的多值列表(例如[{d, ‘ABC’}, {d, ‘DEF’}],这是两个独立的宏!)。不支持重复元素的命令可以在第一个元素之后停止处理它们,而那些构建字典(或映射)的命令可以选择按原样插入它们,或者可以安全地反转列表(如果最后处理的元素变为maps中的最后一个)。

所有配置文件合并规则都以这种方式安全处理。插件编写者应该了解这些规则并做出相应的计划。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233511.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 自学编程的8个坑,你踩了几个?第七个坑87%都踩过!

    自学编程的8个坑,你踩了几个?第七个坑87%都踩过!避免这8个坑,你的学习效率会得到很大的提高

    2022年7月24日
    13
  • Linux学习—vim文本编辑器学习

    1 VIM编辑器概述 什么是vi:可视化接口(Visual Interface). vi————> vim 升级那些提升!支持多级撤销 u跨平台运行语法高亮支持图形界面

    2022年2月26日
    43
  • 数据库备份一张表

    数据库备份一张表数据库备份表备份方案一:备份createtable[备份名]asselect*from[表名];恢复truncatetableorg_group;insertintoorg_groupselect*from[备份名];说明此种情况适用于,同一个数据库,需要备份某张表。备份方案二:备份oracle用户终端执行:exp[用户名]/[密码]tables=[表一],[表二]file=/home/oracle/table.dmp恢复

    2022年5月14日
    123
  • js 做返回顶部效果

    js 做返回顶部效果涉及的知识点: font-awesome字体图标;使用的cdn。 window.onload窗口加载完成事件;如果js代码写在body标签之前,则所有的js都要写在window.onload的事件中;即等待窗口加载完成之后再执行! window.onscroll窗口滚动事件 窗口滚动的距离      document.documentEleme…

    2022年7月13日
    19
  • vmd安装包_VMD分子模拟软件下载

    vmd安装包_VMD分子模拟软件下载VMD分子模拟软件可到其官网进行下载。软件介绍VMD是由美国伊利诺大学开发的一款可视化分子模拟软件,相较于NAMD只能完成动力学模拟计算没有图形界面而言,VMD有图形界面,可用于分子建模、视图可视化和生物分子体系(蛋白质、核酸、脂质等)的分析。由于VMD可以读取PDB(ProteinDataBank)文件并能显示相应的结构,其应用能范围扩广到更多的分子体系上。VMD提供了非常多的渲染和着色方法…

    2022年5月25日
    84
  • Java基础知识学习笔记-12.1(待续)

    Java基础知识学习笔记-12.1(待续)

    2021年9月26日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号