如何在Elixir项目中使用闭源Erlang库?

时间:2015-12-05 16:11:58

标签: elixir

我想在Elixir项目中使用一个闭源Erlang库。该库具有以下目录结构:

  • EBIN
    • 包含1个.app和各种.beam文件
  • PRIV
    • 包含已在C
    • 中实现的此库部分的共享对象文件

在我的Elixir项目中使用此库的推荐方法是什么?

1 个答案:

答案 0 :(得分:4)

实现具有闭源OTP依赖关系的方法可能不止一种,但这里有一个应该有效的建议方法。

以下是git存储库中的示例闭合依赖项(仅存在rebar.configebin文件夹):https://github.com/potatosalad/erlang-closed-example/tree/closed(项目的源is on the master branch)。

如果您要托管来自ebinpriv的已关闭源文件并将rebar.config文件添加到您自己的git存储库,则以下内容应该相同。另外,请确保您的git存储库是私有的(除非该项目的许可证另有说明)。

您应该能够将已关闭的源存储库添加为mix.exs文件的依赖项:

defmodule Example.Mixfile do
  use Mix.Project

  def project do
    [app: :example,
     version: "0.0.1",
     elixir: "~> 1.1",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

  def application do
    [applications: [:logger, :closed]]
  end

  defp deps do
    [{:closed, git: "https://github.com/potatosalad/erlang-closed-example.git", branch: "closed"}]
  end
end

此处提供了完整的示例项目:https://github.com/potatosalad/mix-closed-example

运行mix deps.get后,我可以在iex -S mix shell中执行以下操作:

iex> :closed.secret()
"this is a closed source library"

priv下的共享对象文件也应该有效,但是依赖于操作系统和可用的库版本。