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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【linux】linux 命令:查看 linux 服务器的 jdk、Tomcat、mysql、maven 版本号「建议收藏」

    【linux】linux 命令:查看 linux 服务器的 jdk、Tomcat、mysql、maven 版本号「建议收藏」目录一、jdk二、Tomcat三、mysql四、maven一、jdk输入命令,可以看到jdk版本是:1.8.0_181:cd~java-version二、Tomcat(1)查看Tomcat的安装目录命令是:sudofind/-name*tomcat*(2)切换到Tomcat安装目录的bin目录下:cd/usr/…

    2022年8月21日
    10
  • 主宰操作系统的经典算法

    主宰操作系统的经典算法此篇文章带你梳理一下操作系统中都出现过哪些算法进程和线程管理中的算法进程和线程在调度时候出现过很多算法,这些算法的设计背景是当一个计算机是多道程序设计系统时,会频繁的有很多进程或者线程来同时竞争CPU时间片。那么如何选择合适的进程/线程运行是一项艺术。当两个或两个以上的进程/线程处于就绪状态时,就会发生这种情况。如果只有一个CPU可用,那么必须选择接下来哪个进程/线程可以运行。操作系统中有一个叫做调度程序(scheduler)的角色存在,它就是做这件事儿的,调度程序使用的算法叫做调度算

    2022年6月4日
    28
  • 关于浏览器报错:stack overflow at line: 0 的解决法

    关于浏览器报错:stack overflow at line: 0 的解决法本文主要是从程序猿的角度进行分析的,致力于提供解决问题的思路,而不是盲目的从网上百度关于页面错误:stackoverflowatline:0 很明白,就是堆栈的溢出!所以,导致的原因也很清楚,无非就是页面中出现了类似于递归式的无线循环而导致的,所以可能出现的原因就很明晰了:1.浏览器对图片,js等引用进入了无线循环这时候出错的原因,无非是图片路径不正确或者引用多个相同的js…

    2022年7月15日
    19
  • linux如何设置环境变量_linux用户环境变量

    linux如何设置环境变量_linux用户环境变量linuxfvwm作用FVWM窗口管理器最早是对TWM的修改,可以追溯到1993年。经过几年的迭代,出现了一个可高度自定义的环境,其中可以配置任何行为,动作或事件。它支持自定义键绑定,鼠标手势,主题,脚本等。尽管FVWM在安装后立即可用,但其默认发行版仅提供绝对的最低配置。这是启动自己的自定义桌面环境的良好基础,但是,如果您只想将其用作桌面,则可能要安装由另一个用户分发的完整配置。…

    2022年9月28日
    0
  • 费曼学习法

    费曼学习法费曼学习法我的理解:费曼学习法就是把学好的东西用简洁易懂的语言,传授给别人举例:你学完微积分,然后自己去培训班,自己做老师,传授给学生们,并且学生们都能听懂费曼学习法的四个步骤:1.确定目标

    2022年7月30日
    4
  • SSM整合 运行报Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Method com/mcha「建议收藏」

    SSM整合 运行报Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Method com/mcha「建议收藏」今天在整合SSM的时候,在运行过程中出现了如下错误:org.springframework.web.util.NestedServletException:Handlerdispatchfailed;nestedexceptionisjava.lang.AbstractMethodError:Methodcom/mchange/v2/c3p0/impl/NewProxyResultSet.isClosed()Zisabstract org.springframewor.

    2022年5月5日
    153

发表回复

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

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