---
# System prepended metadata

title: Gradle-poet users and scenarios

---

# Gradle-poet users and scenarios

## Users

1. Build engineer which works with Gradle a lot
2. Kind of ci/cd engineer with software engineer background with JVM i.e. Java backend engineer, android engineer

## Scenarios

### 1.1 User develops independent Gradle plugin for single module project

- Generate a single module project
- Apply their plugin to this project
- Configure plugin extension
- Test plugin's tasks

### 1.2 User develops independent Gradle plugin for multi module project

- Generate a multi module project
- Create dependencies between modules
- Apply their plugin to those projects
- Configure plugin extension
- Test plugin's tasks

### 1.3 User develops Gradle plugin connected with other plugins

- Generate a project
- Apply all needed plugins to the project
- Configure plugins extensions
- Test plugin's tasks

### 1.4 User develops Gradle plugin connected with other plugins, want to test against all supported versions (backward compatibility)

Differs to the previous scenario:
- Apply another version of another/3-rd party plugin, Gradle
- Configure it differently

### 1.5 User develops Gradle plugin related to source code of the project which applied this plugin 

I.e. plugins with bytecode transformations, code generation

- Generate a project
- Apply all needed plugins to the project
- Configure plugins extensions
- Generate/Put baseline source code
- Apply dependencies needed by baseline code
- Test plugin's tasks

### 1.6 User develops Gradle plugin related to check or configure execution environment 

I.e. gradle doctor, avito build checks plugin

- Generate a project
- Apply plugin
- Setup Environment
- Check environment state

### 1.7 User develops Gradle plugin, wants to check the it complies with all optimizations

To test in all functional scenarios that optimizations works (not disabled implicitly):

- Build cache for tasks
- Configuration cache
- Project isolation

### 1.8 User needs to compare performance of different build configurations
   
- Generate a project
- Apply plugins
- Configure plugins
- Generate stub files (Kotlin, resources)
- Use this project as an input to run benchmarks (gradle-profiler or others)

> Why can't user use manually created projects?

To make different projects configurations easier.
To reduce cost of maintaining of such test projects (update versions, configuration, ...).

## Non-functional scenarious

### 2.1 If project is configured incorrectly, I want to find the reason easily

Scenario:
- User configured a project
- It fails with unexpected error in runtime

Current implementation:
- Copy generated project manually
- Copy gradle wrapper to be able to run it
- Figure out exact command to reproduce the issue

Ideas:
- Provide an easy way to reproduce and debug this project: ready one line command to run
- Provide more context about generated project and it's internal state