Example Scenarios
Scenario 1: Single-App Project
Structure:
my_app/
├── rebar.config
└── src/
├── my_app.app.src
└── my_app.erl
Discovery:
- Scan root directory
- Find
src/my_app.app.src - Parse app resource
- App dir = root directory
define_root_appreturns<<"my_app">>- Single-app project detected
Result: One application in project_apps
Scenario 2: Umbrella Project
Structure:
my_project/
├── rebar.config
└── apps/
├── web/
│ └── src/web.app.src
└── db/
└── src/db.app.src
Discovery:
- Scan
apps/directory (fromlib_dirs) - Find
apps/web/src/web.app.src - Find
apps/db/src/db.app.src - Parse both app resources
define_root_appreturnsroot(no app at root)- Umbrella project detected
Result: Two applications in project_apps
Scenario 3: Custom Source Directories
rebar.config:
{src_dirs, ["src", "lib", "core"]}.
Structure:
my_app/
├── src/my_app.app.src
├── lib/helper.erl
└── core/engine.erl
Discovery:
- Search
src/,lib/,core/for app resources - Find
src/my_app.app.src - Associate all three directories with this app
Result: App discovered with multiple source directories
Scenario 4: Mix.exs Compatibility
Structure:
my_elixir_app/
├── mix.exs
└── lib/
└── my_elixir_app.ex
Discovery:
- Find
mix.exs - Parse Elixir project configuration
- Extract application metadata
- Create app info compatible with rebar3
Result: Elixir app discoverable by rebar3
Scenario 5: Application-Specific Dependencies
apps/web/rebar.config:
{deps, [cowboy]}.
apps/db/rebar.config:
{deps, [epgsql]}.
Discovery:
- Discover both apps
- Read each app's
rebar.config - Merge deps:
webgetscowboy,dbgetsepgsql - Top-level deps also added to both
Result: Each app has appropriate dependencies