# Repository Guidelines ## Build, Test, and Development Commands - Build artifact: `mvn clean package` (tests are skipped by default via `pom.xml`). - Run locally (dev): `mvn spring-boot:run -Dspring-boot.run.profiles=dev`. - Run jar: `java -jar target/basic21-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev`. - Execute all tests: `mvn -DskipTests=false test` (note: `pom.xml` excludes `**/*Test.java` from test-compile; temporarily remove/override that config if you need to compile and run tests). - Run single test: `mvn -DskipTests=false test -Dtest=ClassNameTest` (after removing testExcludes from maven-compiler-plugin). ## Code Style Guidelines - Java 21. Use 4-space indentation; UTF-8; no wildcard imports. - Packages: `com.ycwl.basic.*`; classes PascalCase; methods/fields camelCase; constants UPPER_SNAKE_CASE. - Controllers in `controller`, business logic in `service`, persistence in `mapper` + `resources/mapper/*.xml`. - Prefer Lombok for boilerplate and constructor injection where applicable. - Error handling: Use custom exceptions in `exception` package; proper logging with SLF4J. - Testing: Spring Boot testing + JUnit; test names end with `Test` or `Tests` and mirror package structure. ## Project Structure - Application code: `src/main/java/com/ycwl/basic/**` (controllers, services, mapper/repository, dto/model, config, util). - Resources: `src/main/resources/**` (Spring configs, `mapper/*.xml`, static assets, logging). - Tests: `src/test/java/**` mirrors main packages. - Build output: `target/` (never commit). ## Agent-Specific Notes - Keep changes minimal and within existing package boundaries. - Do not reorganize MyBatis XML names or mapper interfaces without updating both sides. - If altering APIs, update affected tests and documentation in the same PR.