7

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

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

你如何管理这些依赖关系?我想避免将文件复制到我的应用程序目录,因为我认为它们不属于那里,而且我有点喜欢 git 子模块方法,它允许我跟踪我正在使用的 lib 版本。

4

4 回答 4

3

最近的钢筋支持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]}
]}.

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

于 2011-11-25T18:01:22.503 回答
2

本文介绍了使用钢筋创建应用程序和发布的更大过程。

更具体地说,我认为这个选项rebar.config可能是您正在寻找的。到目前为止,我发现的唯一方法是为每个应用程序设置一个条目:

{sub_dirs, ["libs/app1",
            "libs/app2",
            ...]}.

这需要更多的手动工作。不幸的是,rebar 仅围绕一个应用程序的概念非常结构化,并且需要更好的支持来维护具有一堆同等价值的应用程序而不是单个应用程序的存储库。

于 2011-04-01T09:35:20.477 回答
1

如果您使用的是 Linux,您可以将所需的模块作为硬链接添加到应用程序的 src 目录中。

这远非最佳,但我还没有找到更好的方法来做到这一点。

于 2011-11-25T10:11:34.247 回答
0

让 Agner 的人将其添加到他们的包管理系统中。在此过程中,他们将创建一个分叉并进行转换以使项目钢筋兼容。此外,原始维护者很可能会整合这些更改。

于 2011-04-02T22:44:44.233 回答