Win10下 Erlang生成依赖项本地副本

孤者浪人 提交于 2019-12-10 08:18:08

    有时候几个不同的应用程序会用到相同的依赖项,在这种情况下,我们会在应用程序的外部创建一个依赖项目录结构。对于我的本地项目,我会把所有已下载的rebar依赖项保存在一个地方。例如,我把所有这些依赖项保存在 G:\ErlangWorkSpace\erl_imports 路径下。 我这台机器的组织方式是ErlangWorkSpace 目录下的任何文件都不会有备份。因为这些我感兴趣的文件在Web上到处都是,所以没有必要创建本地备份。

默认你的主机已经安装了rebar和git,在git bash 下分别执行 rebar -Vgit version 指令,如下说明已经安装成功:

1、在 G:\ErlangWorkSpace\erl_imports路径下新建一个 rebar.config 文件,在rebar.config文件下列出我想要使用的所有依赖项,它的的内容如下:

{deps,[
       {cowboy,".*",{git,"git://github.com/extend/cowboy.git","master"}},
       {ranch,".*",{git,"git://github.com/extend/ranch.git","master"}},
       {bitcask,".*",{git,"git://github.com/basho/bitcask.git","master"}},
       {mochiweb,".*",{git,"git://github.com/mochi/mochiweb.git","master"}}
     ]}.

2、要获取这些依赖项,可以在保存配置文件的目录里输入命令 rebar get-deps

rebar get-deps

3、rebar不仅获取了在配置文件里指定的程序,还递归获取了这些程序所依赖的其他程序。获取程序之后,我们用 rebar compile 命令来编译它们。

rebar compile

 

4、最后一步是把这些依赖项的保存位置告诉Erlang,具体做法是把下面这些代码行移至启动文件${HOME}/.erlang里:

%%设置路径来让所有依赖就位
%%Home = os:getenv("HOME").
Dir = "h:/ErlangWorkSpace/erl_imports/deps",
{ok,L} = file:list_dir(Dir).
io:format("MyLibHome: ~p\n",[Dir]).
io:format("MyLibLists: ~p\n",[L]).
lists:foreach(fun(I) ->
                Path = Dir ++ "/" ++ I ++ "/ebin",
                io:format("MyLibPath: ~p\n",[Path]),
                code:add_patha(Path)
          end, L).

具体步骤如下:

1. 启动erlang shell,输入命令 init:get_argument(home). 查看erlang home目录

init:get_argument(home).

 

 可以看到erlang的home目录。

2. 在home目录下面建立一个.erlang文件,里面内容如下(将Dir后面的路径设置成自己的依赖项路径)。

%%设置路径来让所有依赖就位
%%Home = os:getenv("HOME").
Dir = "h:/ErlangWorkSpace/erl_imports/deps",
{ok,L} = file:list_dir(Dir).
io:format("MyLibHome: ~p\n",[Dir]).
io:format("MyLibLists: ~p\n",[L]).
lists:foreach(fun(I) ->
                Path = Dir ++ "/" ++ I ++ "/ebin",
                io:format("MyLibPath: ~p\n",[Path]),
                code:add_patha(Path)
          end, L).

例如我的路径是:h:/ErlangWorkSpace/erl_imports/deps

3. 编辑完保存,重启erlang shell,输入 code:get_path(). 指令可以看到搜索路径

code:get_path().

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!