将Erlang库与Elixir一起使用

时间:2015-09-18 23:09:28

标签: elixir

我在Elixir项目中尝试使用Erlang库时遇到了一个小问题。 有问题的库是ISO-8583消息打包和解包的erl8583

我找到erl8583的github存储库,并将mix.exs调整为以下内容:

defmodule Iso.Mixfile do
  use Mix.Project

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

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

  defp deps do
    [{:erl8583, github: "mgwidmann/erl8583"}]
  end
end

当我运行mix deps.getmix deps.compile时,它会顺利运行。

然后,我尝试使用iex -S mix启动IEx会话,并收到以下错误:

Unchecked dependencies for environment dev:
* erl8583 (git://github.com/mgwidmann/erl8583.git)
  could not find an app file at _build/dev/lib/erl8583/ebin/erl8583.app. This may happen if the dependency was not yet compiled, or you specified the wrong application name in your deps, or the dependency indeed has no            app file (then you can pass app: false as option)
** (Mix) Can't continue due to errors on dependencies

它说could not find an app file at _build/dev/lib/erl8583/ebin/erl8583.app。据我所知,mix应该刚从deps/erl8583/src抓取该文件并包含在那里(该文件存在,我检查过)。

我尝试将文件从deps手动复制到_build,但没有成功。我做错了什么?

1 个答案:

答案 0 :(得分:10)

erl8583应用程序的源.app文件名称错误。 .app文件通常位于Erlang应用程序的ebin目录中;如果它是用于生成.app文件的源文件,则应将其命名为.app.src。如果你重命名它,它将工作,因为我的shell会话显示:

$ mix deps.get
* Getting erl8583 (https://github.com/mgwidmann/erl8583.git)
Cloning into '/private/tmp/m/deps/erl8583'...
remote: Counting objects: 3468, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 3468 (delta 1), reused 0 (delta 0), pack-reused 3464
Receiving objects: 100% (3468/3468), 1002.71 KiB | 618.00 KiB/s, done.
Resolving deltas: 100% (2640/2640), done.
Checking connectivity... done.
$ mv ./deps/erl8583/src/erl8583.app ./deps/erl8583/src/erl8583.app.src
$ mix deps.compile
==> erl8583 (compile)
Compiled src/erl8583_message_helpers.erl
Compiled src/erl8583_message.erl
Compiled src/erl8583_marshaller_xml.erl
Compiled src/erl8583_marshaller_ebcdic.erl
Compiled src/erl8583_marshaller_json.erl
Compiled src/erl8583_marshaller_binary.erl
Compiled src/erl8583_marshaller_ascii.erl
Compiled src/erl8583_fields_2003.erl
Compiled src/erl8583_fields_1993.erl
Compiled src/erl8583_fields.erl
Compiled src/erl8583_marshaller.erl
src/erl8583_convert.erl:133: Warning: variable 'AsciiHex' is unused
src/erl8583_convert.erl:136: Warning: variable 'IntValue' is unused
Compiled src/erl8583_convert.erl
$ iex -S mix
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false]

Generated iso app
Interactive Elixir (1.1.0-rc.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>