ejabberd switched to a modular approach of organising the code two years ago. It gave birth to a host of components and repositories that are together part of a large corpus of open source code.
I summarised how ejabberd dependencies are structure and what each dependency is doing in this blog post:
ejabberd and dependencies: major set of open source repositories
I am sure developers will find this useful and possibly enlightening.