I looked for way to better organize in-umbrella apps. They are wonderful tool of Elixir! However, when we have two dozens and counting, a simple hierarchy would help.
I tried two approaches:
1) Specifying `apps_path=umbrella/**`.
2) Creating `mix.exs` file like
```
defmodule MyApp.Intermediate.Mixfile do
def project do
app_path: ".",
end
def application, do: []
end
```
and placing its children in subdirs of `intermediate`
Both approaches failed, but somewhat unconvincingly :-) More precisely, to my surprise `mix` found all node applications. It failed when it started to compare paths.
Is there something that I missing?
I am looking for something like
```
mix.exs
umbrella/
aaa/
mix.exs
bbb/
mix.exs
nest-ccc/
ddd/
mix.exs
eee
mix.exs
nest-fff/
ggg/
mix.exs
```
It is also worth noting, that expected dependency rules can be roughly like this (to prevent unexpected behavior):
1) no generalized round deps (so if ddd in nest-ccc depends on aaa or ggg, neither aaa, nor ggg can depend on ddd, or eee -- any app in the same nest)
2) the unnested umbrella is treated as a nest.
While writing the post I realized that possible model for nested umbrella applications can be copied from Googles Bazel (
http://bazel.io/) . Google used Basel / Blaze internally for years, and it worked just superbly.