Project Structure

What Initializr Generates

shopease/
├── .mvn/wrapper/                      Maven wrapper files
├── mvnw, mvnw.cmd                     run Maven without installing it
├── pom.xml                            dependencies and build settings
└── src/
    ├── main/
    │   ├── java/com/shopease/
    │   │   └── ShopeaseApplication.java   main class (entry point)
    │   └── resources/
    │       ├── application.properties     configuration
    │       ├── static/                    static files (css, js, images)
    │       └── templates/                 server-side HTML templates (Thymeleaf)
    └── test/java/com/shopease/
        └── ShopeaseApplicationTests.java  checks the app context starts

Package by Feature

As the app grows, add packages under com.shopease. Component scanning only looks in the main class's package and its sub-packages, so a class in com.other would be ignored.

com.shopease
├── ShopeaseApplication.java
├── product/      ProductController, ProductService, ProductRepository, Product
├── order/        OrderController, OrderService, ...
├── user/
└── config/       AppConfig, WebConfig

Note: A very common beginner bug: putting a controller in a package outside the main class's package. The app starts without errors but every request returns 404.