Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

g000sha256/gradle-module-tree

Repository files navigation

Gradle Module Tree plugin

Maven Central

A Gradle settings plugin that provides a hierarchical DSL for organizing and auto-creating multi-module project structures.

Features

  • 🌳 Hierarchical DSL for module organization
  • πŸ“ Automatic directory creation
  • πŸ”— Automatic module inclusion in Gradle
  • ⚑️ Type-safe project accessors support (automatically enabled)

Setup

Add the plugin to your settings.gradle.kts file:

plugins {
 id(id = "dev.g000sha256.gradle-module-tree") version "1.1.1"
}

Usage

Define your directories and modules in the settings.gradle.kts file. They will be created and included after syncing the project:

include {
 module(name = "app")
 directory(name = "core") {
 module(name = "architecture")
 module(name = "di")
 module(name = "resources")
 module(name = "ui")
 }
 directory(name = "features") {
 directory(name = "main") {
 module(name = "data")
 module(name = "domain")
 module(name = "presentation")
 }
 directory(name = "profile") {
 module(name = "data")
 module(name = "domain")
 module(name = "presentation")
 }
 }
 directory(name = "utils") {
 module(name = "coroutines")
 }
}

This creates the following project structure:

project
β”œβ”€β”€ app
β”œβ”€β”€ core
β”‚ β”œβ”€β”€ architecture
β”‚ β”œβ”€β”€ di
β”‚ β”œβ”€β”€ resources
β”‚ └── ui
β”œβ”€β”€ features
β”‚ β”œβ”€β”€ main
β”‚ β”‚ β”œβ”€β”€ data
β”‚ β”‚ β”œβ”€β”€ domain
β”‚ β”‚ └── presentation
β”‚ └── profile
β”‚ β”œβ”€β”€ data
β”‚ β”œβ”€β”€ domain
β”‚ └── presentation
└── utils
 └── coroutines

Then reference modules in dependencies using type-safe accessors:

dependencies {
 implementation(dependencyNotation = projects.core.architecture)
 implementation(dependencyNotation = projects.core.resources)
 implementation(dependencyNotation = projects.utils.coroutines)
}

Warning

This plugin automatically enables the incubating Gradle TYPESAFE_PROJECT_ACCESSORS feature.

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /