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

 
(2 intermediate revisions by the same user not shown)
Line 167: 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 179: 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 207: 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 ===