我有一个简单的项目使用螺纹钢与此配置:
{sub_dirs, [
"gen",
"apps/basilisk_server",
"rel"
"apps/*"
"ebin"
"deps/*/ebin"
]}.
{erl_opts, [debug_info, fail_on_warning]}.
{
deps,
[
{ email_address, ".*", { git, "git://github.com/mswimmer/erlang-email-address.git", "master"}},
{ gen_smtp , ".*", { git, "https://github.com/Vagabond/gen_smtp.git" , "master"}},
{ pat , ".*", { git, "https://github.com/selectel/pat.git" , "master"}},
{ thrift , ".*", { git, "https://github.com/MustyMustelidae/ThriftErl.git", "master"}}
]
}.
我的目录结构是:
+---.rebar
+---deps
| +---edown
| | +---.rebar
| | +---bin
| | +---doc
| | +---ebin
| | +---priv
| | | ---scripts
| | +---samples
| | ---src
| +---email_address
| | +---.rebar
| | +---ebin
| | +---src
| | ---test
| +---gen_smtp
| | +---.rebar
| | +---ebin
| | +---src
| | +---test
| | ---testdata
| +---gproc
| | +---.rebar
| | +---doc
| | +---ebin
| | +---include
| | +---patches
| | | +---gen_leader
| | | +---kernel
| | | ---stdlib
| | +---priv
| | +---reference
| | +---src
| | +---test
| | | ---eqc
| | ---tetrapak
| +---lager
| | +---.rebar
| | +---ebin
| | +---include
| | +---src
| | ---test
| +---pat
| | +---.rebar
| | +---ebin
| | +---include
| | ---src
| +---proper
| | +---.rebar
| | +---doc
| | +---ebin
| | +---examples
| | +---include
| | +---src
| | ---test
| +---tempo
| | +---.rebar
| | +---c_src
| | +---doc
| | | ---utf8
| | +---ebin
| | +---src
| | ---test
| ---thrift
| +---.rebar
| +---ebin
| +---include
| +---out
| | ---production
| | ---erl
| +---src
| ---test
+---ebin <--- My .app/.beam
---src <--- My source files
---gen <---More source files
(Sorry for the wall)每个依赖项在它的ebin文件夹中都有一个。app文件,我正在运行命令erl -pa apps/*/ebin -pa ebin -pa deps/*/ebin
。我希望我应该能够运行application:ensure_all_started(somedep).
,其中"somedeep"是在它的ebin文件夹中定义的.app的依赖项的名称。但是当我对它们中的任何一个运行它时,我得到错误{error,{somedep,{"no such file or directory","somedep.app"}}}
。当我为自己的应用程序运行它时,我得到了正确的响应({ok,_})。因为我不能启动依赖项的应用程序,所以我自己的应用程序失败,出现undef
错误。我错过了一些步骤注册我的。app文件与外壳?
Windows命令shell不扩展apps/*/ebin
和deps/*/ebin
中的通配符,因此没有正确设置Erlang加载路径