Chapter 04: Developing a Spring Boot Application: Difference between revisions

 
(5 intermediate revisions by the same user not shown)
Line 54: Line 54:


Click &quot;Create&quot;</pre>
Click &quot;Create&quot;</pre>
'''What IntelliJ Does Behind the Scenes:''' - Downloads project template from start.spring.io - Configures Gradle wrapper - Sets up proper source directories - Indexes dependencies - Configures Kotlin compiler - Sets up run configurations
'''What IntelliJ Does Behind the Scenes:'''  
 
* Downloads project template from start.spring.io  
* Configures Gradle wrapper  
* Sets up proper source directories  
* Indexes dependencies  
* Configures Kotlin compiler  
* Sets up run configurations


<span id="creating-a-project-from-the-official-spring-site"></span>
<span id="creating-a-project-from-the-official-spring-site"></span>
Line 82: Line 89:
'''Step 3: Add Dependencies'''
'''Step 3: Add Dependencies'''


Click “ADD DEPENDENCIES” and search for: - Spring Web - Spring Data JPA - PostgreSQL Driver - Spring Boot DevTools - Spring Boot Actuator
Click “ADD DEPENDENCIES” and search for:  
 
* Spring Web  
* Spring Data JPA  
* PostgreSQL Driver  
* Spring Boot DevTools  
* Spring Boot Actuator
 
'''Step 4: Generate and Extract'''


'''Step 4: Generate and Extract''' 1. Click “GENERATE” to download the ZIP file 2. Extract to your projects directory 3. Open in IntelliJ IDEA: File → Open → Select the extracted folder
# Click “GENERATE” to download the ZIP file  
# Extract to your projects directory  
# Open in IntelliJ IDEA: File → Open → Select the extracted folder


'''Pro Tip: Using the Spring Initializr REST API'''
'''Pro Tip: Using the Spring Initializr REST API'''
Line 106: Line 123:
cd my-first-app</syntaxhighlight>
cd my-first-app</syntaxhighlight>
<span id="understanding-the-generated-project-structure"></span>
<span id="understanding-the-generated-project-structure"></span>
=== Understanding the Generated Project Structure ===
=== Understanding the Generated Project Structure ===


Line 149: Line 167:
     runApplication<MyFirstAppApplication>(*args)
     runApplication<MyFirstAppApplication>(*args)
}</syntaxhighlight>
}</syntaxhighlight>
The <code>@SpringBootApplication</code> annotation is actually three annotations in one: - <code>@Configuration</code>: Marks this as a configuration class - <code>@EnableAutoConfiguration</code>: Enables Spring Boot’s auto-configuration - <code>@ComponentScan</code>: Enables component scanning from this package
The <code>@SpringBootApplication</code> annotation is actually three annotations in one:  
* <code>@Configuration</code>: Marks this as a configuration class  
* <code>@EnableAutoConfiguration</code>: Enables Spring Boot’s auto-configuration  
* <code>@ComponentScan</code>: Enables component scanning from this package


<span id="exploring-build.gradle.kts"></span>
<span id="exploring-build.gradle.kts"></span>
== 4.2 Exploring build.gradle.kts ==
== 4.2 Exploring build.gradle.kts ==


Line 161: Line 183:
Before diving into Gradle, let’s understand why we use build tools:
Before diving into Gradle, let’s understand why we use build tools:


'''What Build Tools Do:''' - Dependency management - Compilation and packaging - Running tests - Code quality checks - Deployment preparation
'''What Build Tools Do:'''  
* Dependency management  
* Compilation and packaging  
* Running tests  
* Code quality checks  
* Deployment preparation


'''Popular Build Tools for JVM:''' - '''Gradle''': Modern, flexible, uses Groovy or Kotlin DSL - '''Maven''': Mature, XML-based, extensive plugin ecosystem - '''Bazel''': Google’s build tool, excellent for monorepos - '''SBT''': Scala-focused but works with Kotlin
'''Popular Build Tools for JVM:'''  
* '''Gradle''': Modern, flexible, uses Groovy or Kotlin DSL  
* '''Maven''': Mature, XML-based, extensive plugin ecosystem  
* '''Bazel''': Google’s build tool, excellent for monorepos  
* '''SBT''': Scala-focused but works with Kotlin


We use Gradle with Kotlin DSL because: 1. Type-safe build scripts 2. IDE auto-completion 3. Kotlin syntax consistency 4. Better refactoring support
We use Gradle with Kotlin DSL because:  
# Type-safe build scripts  
# IDE auto-completion  
# Kotlin syntax consistency  
# Better refactoring support


<span id="gradle"></span>
<span id="gradle"></span>
=== 4.2.2 Gradle ===
=== 4.2.2 Gradle ===


Gradle is more than a build tool—it’s a build automation platform. Let’s understand its core concepts:
Gradle is more than a build tool—it’s a build automation platform. Let’s understand its core concepts:


'''Gradle Concepts:''' - '''Project''': What you’re building (your application) - '''Task''': A unit of work (compile, test, jar) - '''Plugin''': Adds tasks and conventions - '''Dependency''': External libraries your project needs - '''Repository''': Where dependencies are downloaded from
'''Gradle Concepts:'''  
* '''Project''': What you’re building (your application)  
* '''Task''': A unit of work (compile, test, jar)  
* '''Plugin''': Adds tasks and conventions  
* '''Dependency''': External libraries your project needs  
* '''Repository''': Where dependencies are downloaded from


'''Gradle Wrapper:''' The wrapper ensures everyone uses the same Gradle version:
'''Gradle Wrapper:''' The wrapper ensures everyone uses the same Gradle version:
Line 189: Line 230:
gradlew.bat build  # Windows</syntaxhighlight>
gradlew.bat build  # Windows</syntaxhighlight>
<span id="managing-dependencies-using-kotlin-dsl"></span>
<span id="managing-dependencies-using-kotlin-dsl"></span>
=== 4.2.3 Managing Dependencies Using Kotlin DSL ===
=== 4.2.3 Managing Dependencies Using Kotlin DSL ===