vrod
Dependencies have diverged: ex_doc
I have a problem that is coming up now and then. One app depends on another, which depends on another. This is all ok because the organization is good – no cyclic dependencies.
However, many times, I find that there is problem with ex_doc because all packages use this. But if one package includes it in a slightly different way, the app that depends on that package will get an error, something like:
Dependencies have diverged:
* ex_doc (Hex package)
the :only option for dependency ex_doc
> In mix.exs:
{:ex_doc, "~> 0.24.0", [env: :prod, repo: "hexpm", hex: "ex_doc", only: :dev, runtime: false, optional: true]}
does not match the :only option calculated for
> In deps/unicode_set/mix.exs:
{:ex_doc, "~> 0.19", [env: :prod, hex: "ex_doc", repo: "hexpm", optional: false]}
Remove the :only restriction from your dep
** (Mix) Can't continue due to errors on dependencies
I am trying many things to fix this in the dependencies, but it seems that always the parent app has this problem. It’s very frustrating!
I am noticing how packages like ecto use ex_doc, and is something like {:ex_doc, "~> 0.20", only: :docs} (but this does not seem to solve the “Dependencies have diverged” problem).
How should packages include ex_docs? Pretty much everything on hex.pm requires this package to make it’s documentation pages, yes?
Most Liked
kip
Thanks to @fireproofsocks and @vrod for the issue and PRs. I have merged and published:
Please reopen an issue if you spot anything else.
LostKobrakai
Dependencies always run in :prod env and :ex_doc is documented to be included as only: :dev (or custom equivalent). This should resolve the problem of ex_doc mismatches. Though it seems :unicode_set doesn’t exclude :ex_doc from :prod at the moment.
axelson
And a PR has already been made and merged to fix that: Sets ex_doc and benchee to optional: true; bumps vers by fireproofsocks · Pull Request #3 · elixir-unicode/unicode_set · GitHub
Now you can either depend on the unicode_set master branch {:unicode_set, github: "elixir-unicode/unicode_set", branch: "master"} or wait for the next release.
Another fix would be to use override: true on ex_doc. I’m actually surprised that the error message doesn’t recommend that, unless it doesn’t allow overriding “only”.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









