Issues with umbrella dependencies

I currently have an umbrella application with 5 child apps. One of the applications defines uuid as a test dependency. Another application defines sentry as a general dependency. sentry defines uuid as a general dependency.

When I compile in dev I get the following error:

Unchecked dependencies for environment dev:
* uuid (Hex package)
  the dependency is not locked. To generate the "mix.lock" file run "mix deps.get"
** (Mix) Can't continue due to errors on dependencies

If I remove sentry the issue goes away. If I compile using MIX_ENV=test the issue goes away. If I define uuid as a general dependency the issue goes away.

It seems that me defining uuid as a test dependency and sentry defining uuid as a general dependency is creating some sort of conflict.

Has anybody experienced this before? Does this seem like a bug or intended behavior? It seems concerning to me that an umbrella applications dependencies can be in conflict with the dependencies of a dependency based on it’s environment definition. This isn’t even a version issue. Both sentry and my application define uuid as ~> 1.0.

What is your Elixir version? How are you defining the test dependency? Elixir was supposed to catch this and ask you to make sure uuid is a available on all environments.

1 Like

I’m using Elixir 1.5.

Here’s how I’m defining it:

defp deps do
  [
    {:ecto, "~> 2.1"},
    {:ex_easypost, "~> 0.2"},
    {:httpoison, "~> 0.12"},
    {:poison, "~> 3.1"},
    {:postgrex, "~> 0.13"},
    # test
    {:bypass, "~> 0.7", only: :test},
    {:ex_machina, "~> 2.0", only: :test},
    {:faker, "~> 0.8", only: :test},
    {:uuid, "~> 1.0", only: :test}
  ]
end

Is it expected that I have to define uuid as a regular dependency (rather than a test dependency) if another dependency requires uuid?

I’m seeing the same thing using Elixir 1.5.1

You are expected to do it BUT mix was supposed to tell you so instead of letting you figure it out by yourself. Can you please open up a bug report with an app that reproduces the issue?

1 Like