我有一个伞形项目(my_app
),如下所示:
├── README.md
├── apps
│ ├── app_one
│ | └── mix.exs
│ ├── app_two
| | └── mix.exs
│ └── ...
├── config
└── mix.exs
我想获取当前正在运行的应用的名称,
例如:app_one
,app_two
。
当我使用时:
Mix.Project.get.project[:app]
我总是得到主项目名称my_app
我怎么能这样做?
答案 0 :(得分:5)
您可以使用:application.get_application/1
获取模块所属的应用程序。如果您传递__MODULE__
作为第一个参数,您将获得当前模块所属的应用程序。
$ cat apps/a/lib/a.ex
defmodule A do
def hello do
:application.get_application(__MODULE__)
end
end
$ cat apps/b/lib/b.ex
defmodule B do
def hello do
:application.get_application(__MODULE__)
end
end
$ iex -S mix
iex(1)> A.hello
{:ok, :a}
iex(2)> B.hello
{:ok, :b}
答案 1 :(得分:0)
Erlang 的 :application.get_application/1
的替代品是 Application.get_application/1
。如果模块未在任何应用规范中列出,则返回 nil
。
iex> Application.get_application MyApp.ExistingModule
:my_app
iex> Application.get_application MyApp.NonExistingModule
nil