My application uses Mochiweb. As I understand, rebar
fetches the latest version from Github when I run make
, because there is a line in rebar.config
:
{deps, [
{mochiweb, ".*",
{git, "git://github.com/mochi/mochiweb.git", "master"}}
My application has a VCS and it is git. So, essentially I have one git repository inside another:
myapp
.git
deps
mochiweb
.git
src
etc
I know that adding a git repository inside another one is not a good idea (git add .
). Git submodules functionality should be used instead.
So, I added the deps/mochiweb
directory as a submodule to the main git repository.
The problem is that when another developer clones the main repository he has to init
and update
the submodules first in order to get deps/mochiweb
(otherwise it would be empty).
If the developer just runs make
right after he clones the main repository, the Makefile says the following:
ERROR: Dependency dir deps/mochiweb failed application validation with reason:
{missing_app_file,"deps/mochiweb"}
make: *** [all] Error 1
My question is: What is the proper way of adding another app to the deps of an Erlang app to allow easy updates by the other developers without using git submodules?
Add the app to the rebar.config and use:
For updating. The first time, you need to use:
See: https://github.com/basho/rebar/wiki/Rebar-commands
Now, back to your error.
My feeling is that you have an (almost) empty directory for mochiweb in your deps, probably as a result of playing with Git submodules. When you run the
get-deps
command, rebar silently discards mochiweb, since the directory is already there. But it expects an OTP application and looks for themochiweb.app
file, which is not there (the directory is empty). Therefore, the error. If my interpretation is correct, you can simply do:Having a look to your rebar.config would help, though.