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

标签 dependencies elixir version elixir-mix

我在获取我从事的其中一个项目中使用的依赖项版本时遇到问题。我想在我的代码中获取此依赖项的版本。有什么简单的方法可以做到这一点吗?

我尝试了以下方法:

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

但是正如我在 Mix.dep.cached 的文档中所读到的,如果设置了 MIX_NO_DEPS,这可能会返回一个空数组。除了创建一个返回自身版本的依赖函数之外,还有什么可靠的方法可以做到这一点吗?

最佳答案

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

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

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

关于dependencies - Elixir - 如何动态获取项目中使用的库版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46695987/

相关文章:

java - Maven 停留在旧版本的系统依赖

visual-studio - 如何阻止 Visual Studio 将程序集添加到我的 web.config?

maven - 如何在多级项目中自动更新maven依赖?

build - 编写一个在 deps.get 之后运行的 Mix 任务

elixir - 片段重用

Elixir:测试失败消息

c++ - 使用 GetFileVersionInfo API (C++) 以编程方式获取 .exe 的 ProductVersion

java - 如何通过Gradle在Java中使用其他项目的库

version - Java API找出编译类文件的JDK版本?

android - 如何从库项目中的 AndroidManifest.xml 获取版本?