Dependencies Elixir-如何动态获取项目中使用的库版本?

Dependencies Elixir-如何动态获取项目中使用的库版本?,dependencies,elixir,version,elixir-mix,Dependencies,Elixir,Version,Elixir Mix,我在获取我在一个项目中使用的依赖项版本时遇到问题。我想在代码中获取此依赖项的版本。有什么简单的方法吗 我尝试了以下方法: {:ok, dependency_version} = Mix.Dep.cached |> Enum.filter(fn(d) -> d.app == :dependency_name end) |> hd

我在获取我在一个项目中使用的依赖项版本时遇到问题。我想在代码中获取此依赖项的版本。有什么简单的方法吗

我尝试了以下方法:

{:ok, dependency_version} = Mix.Dep.cached 
                           |> Enum.filter(fn(d) -> d.app == :dependency_name end) 
                           |> hd 
                           |> Map.fetch!(:status)

但正如我在
Mix.dep.cached
的文档中所读到的,如果设置了
Mix\u NO\u DEPS
,则可能返回空数组。除了在依赖项中生成返回自身版本的函数外,还有可靠的方法吗?

您可以使用
Application.spec/2
获取依赖项的版本,将依赖项的名称作为第一个参数传递,将
:vsn
作为第二个参数传递

来自EXTO master的示例应用程序:

$ iex -S mix
iex(1)> Application.spec(:ecto, :vsn)
'3.0.0-dev'
iex(2)> Application.spec(:postgrex, :vsn)
'0.14.0-dev'

非常感谢,这很好地解决了我的问题:)