在伞项目中获取应用程序名称

时间:2017-04-27 06:33:31

标签: elixir

我有一个伞形项目(my_app),如下所示:

├── README.md ├── apps │ ├── app_one │ | └── mix.exs │ ├── app_two | | └── mix.exs │ └── ... ├── config └── mix.exs

我想获取当前正在运行的应用的名称,
例如:app_oneapp_two
当我使用时:
Mix.Project.get.project[:app]
我总是得到主项目名称my_app 我怎么能这样做?

2 个答案:

答案 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