# 111 Java Maven Dependencies

> 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

- Skill: `majiayu000/111-java-maven-dependencies-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/111-java-maven-dependencies-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/111-java-maven-dependencies-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/111-java-maven-dependencies-2

---

# 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)

