111-java-maven-dependencies · v0.16.0 · 2026-06-15 · sha256 68b79a0a86f677f2
111-java-maven-dependencies v0.16.0A
Immutable. This exact content is served forever at /api/v1/blob/68b79a0a86f677f2.
--- name: 111-java-maven-dependencies description: Use when you need to add or evaluate Maven dependencies that improve code quality — including nullness annotations (JSpecify), static analysis (Error Prone + NullAway), functional programming (VAVR), or architecture testing (ArchUnit) — and want a consultative, question-driven approach that adds only what you actually need. This should trigger for requests such as Add Maven dependencies; Add JSpecify nullness dependencies; Add Error Prone NullAway dependencies; Add VAVR functional dependencies; Add ArchUnit architecture testing dependencies. Part of cursor-rules-java project license: Apache-2.0 metadata: author: Juan Antonio Breña Moral version: 0.16.0 --- # Add Maven dependencies for improved code quality Add essential Maven dependencies that enhance code quality and safety through a consultative, question-driven approach. **This is an interactive SKILL**. **What is covered in this Skill?** - JSpecify: (nullness annotations, `provided` scope) - Error Prone + NullAway: (enhanced static analysis with compile-time null checking) - VAVR: (functional programming with Try/Either and immutable collections) - ArchUnit: (architecture rule enforcement, `test` scope) ## Constraints Before adding Maven dependencies, ensure the project is in a valid state. Use a consultative, question-driven flow that adds only what the user selects. - **MANDATORY**: Run `./mvnw validate` or `mvn validate` before any changes - **SAFETY**: If validation fails, stop and ask the user to fix issues—do not proceed until resolved - **BEFORE READING DEPENDENCY REFERENCES**: Run the question flow embedded in this SKILL.md first. Ask one consolidated dependency-selection question, then ask only conditional follow-up questions required by the selected options. Read only the dependency references selected by the user's answers. Use consultative language, present trade-offs, and wait for user responses before implementing ## When to use this skill - Add Maven dependencies - Add JSpecify nullness dependencies - Add Error Prone NullAway dependencies - Add VAVR functional dependencies - Add ArchUnit architecture testing dependencies ## Workflow 1. **Validate project before changes** Run `./mvnw validate` or `mvn validate` and stop if validation fails. 2. **Ask dependency assessment questions before reading references** Run this XML-included question flow before reading any dependency implementation reference. Ask the consolidated dependency-selection question first, wait for the user's answer, and record selected dependency families before continuing. Ask conditional follow-up questions only when required by the selected dependencies. **Question 1**: Which code-quality dependencies do you want to add? Options: - JSpecify (modern nullness annotations, `provided` scope; recommended for new projects) - Error Prone + NullAway (enhanced compiler analysis and compile-time nullness checking; requires JSpecify) - VAVR (functional programming support with Try/Either and immutable collections) - ArchUnit (architecture testing with JUnit 5, `test` scope) - None - Other (specify) **Recommendation**: Select JSpecify for better null-safety annotations. Add Error Prone + NullAway when you want stronger compile-time analysis. Add VAVR only when functional programming patterns are useful for the project. Add ArchUnit when you want automated architecture governance. **Selection notes**: - If Error Prone + NullAway is selected, also select JSpecify unless the project already has equivalent nullness annotations configured. - If None is selected, do not add dependency-family references. --- **Question 2** (conditional): What is your main project package name? **Note**: This question is asked only if Error Prone + NullAway was selected. This is needed to configure NullAway to analyze your code. For example, if your classes are in `com.example.myproject`, enter `com.example.myproject`. **Format**: Use dot notation (e.g., `com.example.myproject` or `org.mycompany.myapp`) **Example**: `com.example.myproject` After all applicable questions are answered, confirm the selections and map them to references: - If JSpecify is selected, read `references/111-java-maven-dependencies-jspecify.md`. - If enhanced compiler analysis is selected, use the Error Prone + NullAway section from `references/111-java-maven-dependencies-jspecify.md`. - If VAVR is selected, read `references/111-java-maven-dependencies-vavr.md`. - If ArchUnit is selected, read `references/111-java-maven-dependencies-archunit.md`. - Do not read or apply unselected dependency-family references. 3. **Read selected references and add only selected dependencies** Read only the selected dependency-family references, then implement only the dependencies, properties, scopes, plugin configuration, and support files chosen by the user while preserving the existing `pom.xml` structure. 4. **Report trade-offs and next checks** Summarize what was added, why, and any recommended follow-up validations or tooling alignment. ## Reference For detailed guidance, examples, and constraints, see: - [references/111-java-maven-dependencies-jspecify.md](references/111-java-maven-dependencies-jspecify.md) - [references/111-java-maven-dependencies-vavr.md](references/111-java-maven-dependencies-vavr.md) - [references/111-java-maven-dependencies-archunit.md](references/111-java-maven-dependencies-archunit.md)