gextra
gextra

Reputation: 8885

How to execute an application with nested module loading in Erlang?

I am creating an erlang application named (app_main) that will be initializing two other erlang applications ( app_1 and app_2 ):

Following is the structure of the code. Notice that app_1 and app_2 are under the deps directory and each have their own deps directory, which expand into further other nested references to other code directory structures, etc...

/app_main
   /ebin
       /main.erl
   /deps
       /app_1
           /ebin
           /deps
               /...
       /app_2
           /ebin
           /deps
               /...

To start my app_main application, I am issuing the following command:

erl -pa ./ebin   ./deps/*/ebin   ./deps/*/deps/*/ebin -s app_main

The problem is that I need to know how many levels of nested deps references I may have... This sounds a bit illogical to me and I am wondering if there are better ways to achieve this.

For instance, would rebar be useful identifying nested rebar configs and add all dependencies to the app_main's deps directory automatically ?

Upvotes: 0

Views: 133

Answers (2)

Dry
Dry

Reputation: 116

How are you specifying these dependencies, where do they come from, and how are you compiling them? When you're using 3rd party applications they will, in general, manage their own dependencies. Therefore, you should only ever to have start the shell like this:

erl -pa ebin deps/*/ebin

Both Rebar and erlang.mk are great tools for managing your applications and their dependencies.

Upvotes: 1

dethtron5000
dethtron5000

Reputation: 10841

Rebar is very useful for managing dependencies. You can define app 1 and 2 as dependencies for your main app and, assuming app 1 and 2 have their dependencies defined in Rebar, it will install them and their dependencies in your deps folder

See Rebar's documentation here: https://github.com/basho/rebar/wiki/Dependency-management

Upvotes: 1

Related Questions