CLI generating modularized Gradle projects based on different shapes
If you need to create small or medium projects (<300 modules), you can use the web generator: https://cdsap.github.io/ProjectGenerator/
curl -L https://github.com/cdsap/ProjectGenerator/releases/download/v0.3.7/projectGenerator --output projectGenerator
chmod 0757 projectGenerator
./projectGenerator generate-project --modules 100This command generates a project with the specified shape, layers, and modules. All options below can be combined with this mode.
./projectGenerator generate-yaml-versionsThis command generates a versions.yaml file template for custom dependency versions.
Then, you can use the versions.yaml in the generate-project command:
./projectGenerator generate-project --shape triangle --layers 5 --modules 100 --versions-file versions.yaml
--shape: triangle, rhombus, flat, rectangle, middle_bottleneck, inverse_triangle (default: rectangle)--modules(required): Number of modules to create--layers: Number of layers (default: 5)--language: kts (default), groovy, both--type: android (default), jvm--classes-module: Number of classes per module (default: 5)--classes-module-type: fixed (default), random--type-of-string-resources: normal (default), large--generate-unit-test: Generate unit tests (default: false)--gradle: gradle_8_13, gradle_8_14_3, gradle_9_0_0, gradle_9_1_0, gradle_9_2_0 (default: gradle_9_2_0)--develocity: Enables the Develocity build scan plugin (default: false). If --develocity-url is not specified, the build scan will be published to Gradle Scans.--develocity-url: Specify Develocity URL--versions-file: Path to a custom YAML file with dependency versions--project-name: Name of the project--agp9: Use AGP 9.x (default: false). Only for Android projects.
./projectGenerator generate-project --shape rhombus --modules 50 --layers 4 --language both --type jvm --classesModule 10 --classesModuleType random --typeOfStringResources large --generateUnitTest --gradle gradle_8_9 --develocity --versionsFile ./my_versions.yamlval modules = 50
val shape = Shape.RHOMBUS
ProjectGenerator(
modules = 50,
shape =shape,
language = Language.KTS,
typeOfProjectRequested = TypeProjectRequested.ANDROID,
classesPerModule = ClassesPerModule(ClassesPerModuleType.FIXED, 20),
versions = Versions(project = Project(jdk = "17")),
typeOfStringResources = TypeOfStringResources.LARGE,
layers = 5,
generateUnitTest = true,
gradle = GradleWrapper(Gradle.GRADLE_9_2_0),
path = file.path
).write()
implementation("io.github.cdsap:projectgenerator:0.3.7")
Number of modules to create in the project
Number of layers where the modules will be distributed.
Defines the shape of the project dependency graph based on the distribution of modules by layer. When generating a new
project, a graph.dot file is created in the root project folder containing the project dependency graph.
Current shapes supported:
default
The project generated includes modules build scripts in Kotlin DSL
The project generated includes modules build scripts in Groovy
Two projects will be generated using Kotlin DSL and Groovy
./projectGenerator generate-project --shape triangle --layers 5 --modules 100 --language groovyType of project generated:
default
Android project
Kotlin-JVM project
./projectGenerator generate-project --shape triangle --layers 5 --modules 100 --type jvmClasses generated per module, options:
- classes: Classes to generate per module. Default 5.
- type:
- Fixed(default): Each module will create n classes where n represents the argument
classes. - Random: Each module will create
Random.nextInt(2, classesPerModule.classes)classes.
- Fixed(default): Each module will create n classes where n represents the argument
./projectGenerator generate-project --shape triangle --layers 5 --modules 100 --classes-module-type random --classes-module 150Each module generated includes 8 string resources in the file strings.xml. Default.
Each module generated includes 900 string resources in the file strings.xml
./projectGenerator generate-project --shape triangle --layers 5 --modules 100 --type-of-string-resources largedefault false
If enabled, each module will generate n unit tests, where n is the argument classes
./projectGenerator generate-project --shape triangle --layers 5 --modules 100 --generate-unit-test trueGradle used, versions supported:
- Gradle 8.5
- Gradle 8.9
- Gradle 8.13
- Gradle 8.14_2
- Gradle 9.0.0 default
./projectGenerator generate-project --shape triangle --layers 5 --modules 100 --gradle 8.13Example output versions.yaml:
project:
develocity: 4.1
jdk: 23
kotlin:
kgp: 2.2.0
ksp: 2.2.0-2.0.2
coroutines: 1.10.2
kotlinProcessor:
processor: KSP
android:
agp: 8.12.0
androidxCore: 1.16.0
appcompat: 1.7.1
material: 1.12.0
lifecycle: 2.9.2
fragment: 1.8.8
activity: 1.10.1
constraintlayout: 2.2.1
work: 2.10.3
hilt: 2.56.2
hiltAandroidx: 1.2.0
composeBom: 2025.07.00
testing:
junit4: 4.13.2
junit5: 5.13.2
truth: 1.4.4
mockk: 1.14.5
coreTesting: 2.2.0
junitExt: 1.3.0
additionalSettingsPlugins:
additionalBuildGradleRootPlugins:
- id: com.autonomousapps.dependency-analysis
version: 2.19.0
apply: true





