Gradle plugin to create a java application based on Clean Architecture following our best practices!
To use the plugin you need Gradle version 5 or later, to start add the following section into your build.gradle file.
plugins {
id "co.com.bancolombia.cleanArchitecture" version "1.6.4"
}
The Scaffolding Clean Architecture plugin will allow you run 8 tasks :
1 The cleanArchitecture | ca
task will generate a clean architecture structure in your project, this task has three optional parameters; package
, type
and name
.
package = <package.we.need>
: You can specify the main or default package of your project. Default Value = co.com.bancolombia
type = <imperative | reactive>
: With this parameter the task will generate a POO project. Default Value = imperative
name = NameProject
: This parameter is going to specify the name of the project. Default Value = cleanArchitecture
coverage = <jacoco | cobertura>
: This parameter is going to specify the coverage tool for the project. Default Value = jacoco
gradle cleanArchitecture --package=co.com.bancolombia --type=imperative --name=NameProject --coverage=JACOCO
gradle ca --package=co.com.bancolombia --type=imperative --name=NameProject --coverage=JACOCO
The structure will look like this:
π¦NameProject
β£ πapplications
β β πapp-service
β β β£ πsrc
β β β β£ πmain
β β β β β£ πjava
β β β β β β π[package]
β β β β β β β£ πconfig
β β β β β β β β π[configs and beans]
β β β β β β β πMainApplication.java
β β β β β πresources
β β β β β β£ π[properties]
β β β β πtest
β β β β β πjava
β β β β β β π[package]
β β β πbuild.gradle
β£ πdeployment
β β£ π[Dockerfile, Pipelines as a code]
β£ πdomain
β β£ πmodel
β β β£ πsrc
β β β β£ πmain
β β β β β πjava
β β β β β β π[package]
β β β β πtest
β β β β β πjava
β β β β β β π[package]
β β β πbuild.gradle
β β πusecase
β β β£ πsrc
β β β β£ πmain
β β β β β πjava
β β β β β β π[package]
β β β β πtest
β β β β β πjava
β β β β β β π[package]
β β β β β β β πusecase
β β β πbuild.gradle
β£ πinfrastructure
β β£ πdriven-adapters
β β£ πentry-points
β β πhelpers
β£ π.gitignore
β£ πbuild.gradle
β£ πgradle.properties
β£ πlombok.config
β£ πmain.gradle
β£ πREADME.md
β πsettings.gradle
2 The generateModel | gm
task will generate a class and interface in model layer, this task has one required parameter name
.
gradle generateModel --name=[modelName]
gradle gm --name [modelName]
This task will generate something like that:
π¦domain
β£ πmodel
β β£ πsrc
β β β£ πmain
β β β β πjava
β β β β β π[package]
β β β β β β πmodel
β β β β β β β£ πgateways
β β β β β β β β πModelRepository.java
β β β β β β β πModel.java
β β β πtest
β β β β πjava
β β β β β π[package]
β β β β β β πmodel
β β πbuild.gradle
3 The generateUseCase | guc
task will generate a class in model layer, this task has one required parameter name
.
gradle generateUseCase --name=[useCaseName]
gradle guc --name [useCaseName]
This task will generate something like that:
π¦domain
β πusecase
β β£ πsrc
β β β£ πmain
β β β β πjava
β β β β β π[package]
β β β β β β πusecase
β β β β β β β πbusiness
β β β β β β β β πBusinessUseCase.java
β β β πtest
β β β β πjava
β β β β β π[package]
β β β β β β πusecase
β β β β β β β πbusiness
β β πbuild.gradle
4 The generateDrivenAdapter | gda
task will generate a class in Infrastructure layer, this task has one required parameter type
.
Whether you'll use generic one also parameter name
is required.
gradle generateDrivenAdapter --type=[drivenAdapterType]
gradle gda --type [drivenAdapterType]
When use MONGODB
type please be sure that property 'reactive' is set correctly in gradle.properties
reactive=true
reactive=false
Reference for drivenAdapterType | Name | Additional Options |
---|---|---|
GENERIC | Empty Driven Adapter | --name [name] |
JPA | JPA Repository | --secret [true-false] |
MONGODB | Mongo Repository | --secret [true-false] |
ASYNCEVENTBUS | Async Event Bus |
This task will generate something like that:
π¦infrastructure
β£ πdriven-adapters
β β πjpa-repository
β β β£ πsrc
β β β β£ πmain
β β β β β πjava
β β β β β β π[package]
β β β β β β β πjpa
β β β β β β β β£ πconfig
β β β β β β β β β πDBSecret.java
β β β β β β β β£ πhelper
β β β β β β β β β πAdapterOperations.java
β β β β β β β β£ πJPARepository.java
β β β β β β β β πJPARepositoryAdapter.java
β β β β πtest
β β β β β πjava
β β β β β β π[package]
β β β β β β β πjpa
β β β β β β β β πhelper
β β β πbuild.gradle
5 The generateEntryPoint | gep
task will generate a class in Infrastructure layer, this task has one required parameter type
.
Whether you'll use generic one also parameter name
is required.
gradle generateEntryPoint --type=[entryPointType]
gradle gep --type [entryPointType]
Reference for entryPointType | Name | Additional Options |
---|---|---|
GENERIC | Empty Entry Point | --name [name] |
RESTMVC | API REST (Spring Boot Starter Web) | |
WEBFLUX | API REST (Spring Boot Starter WebFlux) |
This task will generate something like that:
π¦infrastructure
β£ πentry-points
β β πgeneric
β β β£ πsrc
β β β β£ πmain
β β β β β πjava
β β β β β β π[package]
β β β β β β β πgeneric
β β β β πtest
β β β β β πjava
β β β β β β π[package]
β β β β β β β πgeneric
β β β πbuild.gradle
6 The validateStructure | vs
Validate that project references aren't violated.
gradle validateStructure
gradle vs
7 The generatePipeline | gpl
task will generate CI pipeline inside the folder "./deployment/", this task has one required parameter type
.
gradle generatePipeline --type=[pipelineType]
gradle gpl --type=[pipelineType]
Reference for pipelineType | Name |
---|---|
AZURE | Azure Pipeline |
8 The deleteModule | dm
task will delete a sub project, this task has one required parameter module
.
gradle deleteModule --module=[name]
gradle dm --module=[name]
Review the issues, we hear new ideas.
Read more About Clean Architecure