使用钢筋处理外部库

Pap*_*ipo 6 erlang dependency-management rebar

我想在我的应用程序中使用一些库,比如https://github.com/Panmind/erlang-ruby-marshal.该repo拥有一个src目录,但没有.app文件(因为它不是一个应用程序),所以我不能使用get-deps.

我尝试了另一种方法,在sub_dirs中添加了一个libs目录,并将repo添加为git子模块,但是rebar不会编译它的任何文件.我猜这个rebar只编译otp应用程序,但不仅仅是编译与应用程序无关的.erl文件.

你如何管理这种依赖?我想避免将文件复制到我的app目录,因为我不认为它们属于那里,我有点像git子模块方法,它允许我跟踪我正在使用的lib版本.

ala*_*rik 3

最近的 rebar 支持raw依赖项选项。当此选项是特定的时,rebar 不要求依赖项具有标准的 Erlang/OTP 布局,该布局假定存在“src/dependency_name.app.src”或“ebin/dependency_name.app”文件(请参阅此处的更多详细信息) 。

例如:

{deps, [
  {erlang_ruby_marshal, "",
    {git, "https://github.com/Panmind/erlang-ruby-marshal", {branch, master}},
    [raw]}
]}.
Run Code Online (Sandbox Code Playgroud)

请注意,rebar 现在可以获取它,但仍然无法编译它。正如其他评论者指出的那样,这种依赖项没有理由不应该有一个.app文件。我会分叉存储库并将.app文件添加到其中。

  • @clofresh,补丁终于被接受了。现在它是标准钢筋的一部分。 (2认同)