我在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.get
和mix 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
,但没有成功。我做错了什么?
答案 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)>