# Maven pom.xml, Lifecycle व Gradle एक नज़र में — एडवांस्ड जावा

Source: https://www.geekswithgeeks.com/hi/advanced-java/adv-build-deep

> एक असली pom.xml पढ़ें — coordinate, dependency, plugin — क्रम में Maven lifecycle चरण देखें, और समकक्ष Gradle बिल्ड फ़ाइल देखें।

## pom.xml की संरचना

`groupId`:`artifactId`:`version` रिपॉज़िटरी में आपके आर्टिफ़ैक्ट को विशिष्ट पहचान देते हैं। `<dependencies>` ज़रूरी लाइब्रेरी सूचीबद्ध करती हैं (`<scope>` सहित); `<plugins>` बिल्ड को विस्तारित करती हैं।

```xml
<project>
  <groupId>com.acme</groupId>
  <artifactId>orders-service</artifactId>
  <version>1.0.0</version>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
```

## क्रम में lifecycle

Maven का डिफ़ॉल्ट lifecycle चरणों को **क्रम में** चलाता है, हर चरण पिछले सभी को शामिल करता है: `validate → compile → test → package → verify → install → deploy`। `mvn package` कंपाइल व टेस्ट भी करता है; `mvn install` आर्टिफ़ैक्ट को स्थानीय `~/.m2` रिपॉज़िटरी में भी डालता है।

## Gradle एक नज़र में

Gradle वही dependency छोटे Kotlin/Groovy DSL में व्यक्त करता है, tasks को तय चरणों की बजाय एक graph के रूप में मॉडल करता है, और केवल बदले हुए input वाले task दोबारा चलाता है — इसी वजह से दोहराए गए बिल्ड आमतौर पर तेज़ होते हैं।

```kotlin
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    testImplementation("org.junit.jupiter:junit-jupiter")
}

tasks.test {
    useJUnitPlatform()
}
```
