🌟 We are Open Source! Check out our repository on GitHub

Java Project Structure

A scalable and maintainable folder structure for Java applications

File Structure

  • src
    • main
      • java
        • com
          • example
            • myapp
              • Application.java
              • config
                • DatabaseConfig.java
                • SecurityConfig.java
              • controller
                • UserController.java
                • AuthController.java
              • service
                • UserService.java
                • AuthService.java
                • impl
                  • UserServiceImpl.java
              • model
                • User.java
                • Role.java
              • repository
                • UserRepository.java
                • RoleRepository.java
              • dto
                • UserDto.java
                • CreateUserRequest.java
              • exception
                • UserNotFoundException.java
                • GlobalExceptionHandler.java
              • util
                • DateUtils.java
                • ValidationUtils.java
      • resources
        • application.yml
        • application-dev.yml
        • application-prod.yml
        • static
        • templates
        • db
          • migration
    • test
      • java
        • com
          • example
            • myapp
              • controller
                • UserControllerTest.java
              • service
                • UserServiceTest.java
              • repository
                • UserRepositoryTest.java
      • resources
        • application-test.yml
  • docs
    • api.md
    • deployment.md
  • pom.xml
  • Dockerfile
  • .gitignore
  • README.md

Directory Structure Explanation

config/

Contains configuration classes for Spring Boot, security, and database setup.

service/impl/

Contains implementation classes for service interfaces, following separation of concerns.

dto/

Data Transfer Objects for API requests and responses, separate from entity models.

exception/

Contains custom exception classes and global exception handling logic.

util/

Contains utility classes with static helper methods used across the application.

application.yml

YAML configuration file providing more readable format than properties files.

application-dev.yml

Development environment specific configuration settings.

resources/db/migration/

Database migration scripts for version control of database schema changes.

test/resources/

Test-specific configuration files and resources separate from main application.

Dockerfile

Docker configuration for containerizing the Java application.