2015-09-04 45 views
3

我尝试安装冰火冲突的要求,所以我加入到mix.ex其最新版本(在十六进制):错误安装冰火 - 上外生

{:addict, ">= 0.1.0"} 

然后,我已经运行混合reps.get并得到了一个错误:

仰望的相互矛盾的要求的替代品上外生

From mix.lock: 1.0.0 
    From addict v0.1.0: ~> 0.9 
** (Mix) Hex dependency resolution failed, relax the version requirements or unlock dependencies 

我试图做的是,在mix.lock但无法克服,因为这个错误出现了:

(Mix) Unknown package version ecto v0.0.9 in lockfile 

解决此问题的最佳方法是什么?

回答

4

你可以设置一个依赖性与override标志覆盖:

defp deps do 
    ... 
    {:ecto, "~> 1.0.0", override: true}, 
    {:addict, "~> 0.1.0"}, 
    ... 
end 

docs

:override - if set to true the dependency will override any other definitions of itself by other dependencies

这意味着即使addict版本设置为0.9.0 - 在1.0.0版本会使用。这可能会导致问题,如果addict正在使用Ecto中的功能,现在已被弃用。

+0

再次感谢您。我在mix.exs中添加了{:ecto,“> = 1.0.0”,覆盖:true},尽管错误与mix.lock一起解决了。 mix.lock的作用是什么?另外,您是否可以解释〜>和> =运算符之间的区别? –

+1

'mix.lock'文件用于锁定依赖关系。这意味着如果您创建了一个项目并将其克隆下来,则获取的依赖项与您拥有的依赖项相同。它将存储确切的版本号,而不是'mix.exs'中指定的'版本约束' - 您不应该手动修改'mix.lock'。你或许应该使用'〜>',而不是'> ='的差异在http://stackoverflow.com/questions/4292905/what-is-the-difference-between-and-when-specifying-rubygem-in解释-gemfile – Gazler

+0

谢谢Gazler。晶莹剔透。 –