如何解决 erlang rebar 的依赖问题?

Posted

技术标签:

【中文标题】如何解决 erlang rebar 的依赖问题?【英文标题】:How to resolve dependency issues with erlang rebar? 【发布时间】:2020-03-06 20:21:34 【问题描述】:

我正在尝试将 swagger 添加到现有的演示项目 erlang_rest_api 作为学习经验,但我似乎并没有走得太远......

我克隆了 repos:

git clone https://github.com/dronowar/erlang_rest_api

然后我将cowboy_swagger添加到rebar.config

cowboy_swagger, ".*", git, "git://github.com/inaka/cowboy_swagger.git"

当我构建时,我得到:

Dependency not available: jsx-2.9.0 (undefined)
Dependency not available: cowboy-2.5.0 (undefined)
Dependency not available: ranch-1.6.2 (undefined)
Dependency not available: trails-2.1.0 (undefined)

所以我添加到rebar.config

jsx, ".*", git, "git://github.com/talentdeficit/jsx.git", tag, "2.9.0",
ranch, ".*", git, "git://github.com/ninenines/ranch.git", tag, "1.6.2",
trails, ".*", git, "git://github.com/inaka/cowboy-trails.git", tag, "2.1.0",

然后我删除 deps 目录并重新构建:

...
==> poolboy (get-deps)
==> sync (get-deps)
==> katana_test (get-deps)
==> jsx (get-deps)
ERROR: Failed to load erlang_rest_api/deps/trails/rebar.config: error,
                                                                                      34,
                                                                                       file,
                                                                                       error,
                                                                                        function_clause,
                                                                                        [erl_eval,
                                                                                          '-inside-an-interpreted-fun-',
                                                                                          [katana_test],
                                                                                          [],
                                                                                         erl_eval,
                                                                                          eval_fun,
                                                                                          6,
                                                                                          [file,
                                                                                            "erl_eval.erl",
                                                                                           line,
                                                                                            829],
                                                                                         erl_eval,
                                                                                          expr_list,
                                                                                          6,
                                                                                          [file,
                                                                                            "erl_eval.erl",
                                                                                           line,
                                                                                            888],
                                                                                         erl_eval,
                                                                                          expr,
                                                                                          5,
                                                                                          [file,
                                                                                            "erl_eval.erl",
                                                                                           line,
                                                                                            240],
                                                                                         erl_eval,
                                                                                          expr_list,
                                                                                          6,
                                                                                          [file,
                                                                                            "erl_eval.erl",
                                                                                           line,
                                                                                            888],
                                                                                         erl_eval,
                                                                                          expr,
                                                                                          5,
                                                                                          [file,
                                                                                            "erl_eval.erl",
                                                                                           line,
                                                                                            240],
                                                                                         erl_eval,
                                                                                          eval_lc1,
                                                                                          6,
                                                                                          [file,
                                                                                            "erl_eval.erl",
                                                                                           line,
                                                                                            706],
                                                                                         erl_eval,
                                                                                          eval_generate,
                                                                                          7,
                                                                                          [file,
                                                                                            "erl_eval.erl",
                                                                                           line,
                                                                                            735]]
make: *** [Makefile:7: deps] Error 1

katana_test 似乎是某种测试工具。我尝试将该存储库 (inaka/katana-est) 添加到 rebar.config,但它也不起作用。

我还尝试将牛仔标记为版本“2.5.0”,如前面“未定义”中列出的那样,但这没有任何区别。

我们真的需要这个特定的,列出每个依赖项的每个依赖存储库吗?

我也尝试使用十六进制:

    jsx, ".*",
    ranch, ".*",
    trails, ".*",
    cowboy_swagger, "2.1.0"

但我还是得到了:

Dependency not available: jsx-.* (undefined)
Dependency not available: trails-.* (undefined)
Dependency not available: cowboy_swagger-2.1.0 (undefined)
ERROR: compile failed while processing 

我是否缺少另一个依赖项?

【问题讨论】:

请在问题链接中将[1]: https://github.com/donowar/erlang_rest_api 更新为[1]: https://github.com/dronowar/erlang_rest_api。你在donowar 中跳过r,正确的是dronowar 【参考方案1】:

问题源于cowboy_swagger 是为与rebar3 一起使用而构建的,它与旧钢筋不兼容,但 erlang_rest_api 使用的是旧钢筋,正如您在其Makefile 中看到的那样。

您的问题的解决方案可能就像使用 rebar3 构建项目一样简单。但是如果你这样做要小心,因为那会破坏make runmake run-local。您必须弄清楚如何使用发布来获得相同的结果。

【讨论】:

以上是关于如何解决 erlang rebar 的依赖问题?的主要内容,如果未能解决你的问题,请参考以下文章

Rebar3:如何从 erlang 引用库的源工件?

Erlang、Rebar 和具有多个应用程序的程序组织

如何使用 Rebar3 从我的本地文件系统添加依赖项?

如何使用 erlang 插件在 vscode 中调试 rebar3 erlang?

Erlang / Rebar3 - 如何添加应用程序以发布但不启动它?

Rebar3 无法下载对 Windows 10 的依赖