2015-12-30 124 views
1

我有几个有用的库,我已经为elixir构建过。我已经把它们放在十六进制上了。我已经在库B中使用库A,并且我已经将库B作为库A的依赖项。现在当然库A不会生成。如何在组合中管理包相互依赖关系?

加载时出错项目:a。在/用户/我/有趣/ A/DEPS/AR **(混合)试图从加载ArgumentParser.Mixfile“/用户/我/有趣/ A/DEPS/A/mix.exs”,但具有相同名称的另一个项目在已定义的‘/Users/jistone/fun/a/mix.exs’

这里是我到目前为止已经试过:

  • 从deps文件夹中删除a
  • 删除a from mix.lock
  • change deps/b/mix.exs,将path:添加为a deps条目以指向项目文件夹。
  • 改变mix.exsab在各自的项目文件夹

指向所有的失败与相应的错误消息。

所以问题是:如何通过构建当前项目来满足混合来识别依赖关系?


编辑:更多细节

a是用于解析命令行参数的库。程序包b是一个用于生成README.md文件的混合任务。在包b中,我使用包a来解析混合任务的命令行参数。现在我正在尝试使用混合任务为包a生成README.md,并且我得到了上述失败。

我可以通过启动一个会话IEX和加载相关的光束文件解决办法,但我想获得混合任务工作,如果可能的...

+1

循环依赖可能是代码分离不够好的标志。你有没有想过提取第三个共同部分的库?也许将两个库合并成一个?在不知道代码和特定接口的任何细节的情况下,很难说出最佳解决方案。 –

+0

完全同意帕特里克在这一个。我会试图解决循环依赖本身,而不是试图弄清楚如何得到混合(或十六进制)来处理它。 –

+0

@PatrickOscity真的没有共同之处。我有一个用于解析命令行参数的库和一个用于生成文档的库。两个图书馆都使用自己和彼此。 – jisaacstone

回答

0

3解决方案,我发现(他们都不完美)

  • 将readme docgen项目构建为escript,然后将其作为依赖项移除。

  • 更改mix.exs文件中项目的名称,生成文档,然后将其更改回来。

  • 使用iex中的-pa arg加载所有光束文件并手动运行代码。