rebar3使用介绍(五)自定义依赖获取方式

rebar3使用介绍(四)自定义依赖获取方式

每个依赖获取方式都是 rebar_resorece behavior描述

-module(rebar_resource).

-export_type([resource/0
             ,type/0
             ,location/0
             ,ref/0]).

-type resource() :: {type(), location(), ref()}.
-type type() :: atom().
-type location() :: string().
-type ref() :: any().

-callback lock(file:filename_all(), tuple()) ->
    rebar_resource:resource().
-callback download(file:filename_all(), tuple(), rebar_state:t()) ->
    {tarball, file:filename_all()} | {ok, any()} | {error, any()}.
-callback needs_update(file:filename_all(), tuple()) ->
    boolean().
-callback make_vsn(file:filename_all()) ->
    {plain, string()} | {error, string()}.

rebar3 自带的获取方式有rebar_git_resource, rebar_hg_resourcerebar_pkg_resource

可以向插件一样,自定义资源获取,在Kelly McLaughlin的rebar3_tidy_deps资源中可以看到这方面的一个例子:

-module(rebar_tidy_deps).

-export([init/1]).

-spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
init(State) ->
    {ok, rebar_state:add_resource(State, {github, rebar_github_resource})}.

rebar_github_resource实现rebar3资源行为的此资源将添加到可用资源列表中rebar_state。将repo添加为插件以rebar.config允许使用此资源:

{mydep, {github, "kellymclauglin/mydep.git", {tag, "1.0.1"}}}.

{plugins, [
    {rebar_tidy_deps, ".*", {git, "https://github.com/kellymclaughlin/rebar3-tidy-deps-plugin.git", {tag, "0.0.2"}}}
]}.

这一篇在开发过程中其实及其实用,因为有些公司开发可能做了外网访问限制,你可以将资源上传到自己的内网服务器上,然后所有的资源都变成从你的服务器下载而不是github或者其他(当然你也可以直接把get-deps好的目录和rebar.lock直接归档),甚至你可以重写pkg和git的获取方式,即使子依赖项,他们也会从你的服务器获取文件而且不用破坏文件本身

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章