Əsas məzmuna keçin

Maven

  • Build Avtomatlaşdırma Aləti: Maven əsasən Java layihələri üçün istifadə olunan build avtomatlaşdırma və layihə idarəetmə alətidir.
  • Konfiqurasiya üzərində Konvensiya: Standart qovluq strukturu və build həyat dövrünü izləyir, konfiqurasiya ehtiyacını azaldır.
  • Asılılıq İdarəetməsi: Layihə asılılıqlarını idarə edir, lazım olan kitabxanaları avtomatik yükləyir.
  • Layihə Obyekt Modeli (POM): Layihəni, onun asılılıqlarını və build prosesini təsvir etmək üçün XML əsaslı POM fayllarından istifadə edir.
  • Plugin-lər: Plugin arxitekturası vasitəsilə funksionallığı genişləndirir.
  • Anbar Sistemi: Artifaktları lokal və uzaq anbarlardan saxlayır və gətirir.
  • Çox-Modül Layihələr: Çoxlu modulları olan mürəkkəb tətbiqetmələrin qurulmasını dəstəkləyir.

Əsas Anlayışlar​

Layihə Obyekt Modeli (POM)​

POM layihə haqqında məlumat və Maven tərəfindən layihəni qurmaq üçün istifadə olunan konfiqurasiya təfərrüatlarını ehtiva edən XML faylıdır.

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
</plugins>
</build>
</project>

Maven Koordinatları​

Maven artifaktları unikal şəkildə müəyyən etmək üçün koordinatlardan istifadə edir:

  • groupId: Təşkilat və ya qrup (məsələn, com.example)
  • artifactId: Layihə adı (məsələn, my-app)
  • version: Layihənin spesifik versiyası (məsələn, 1.0-SNAPSHOT)
  • packaging: Artifakt növü (məsələn, jar, war, ear)

Maven vs Digər Build Alətləri​

XüsusiyyətMavenGradleAnt
Build DiliXMLGroovy/Kotlin DSLXML
ÇeviklikKonvensiya əsaslıYüksək dərəcədə çevikYüksək dərəcədə çevik
PerformansOrtaArtan build-lərlə sürətliSadə build-lər üçün sürətli
Asılılıq İdarəetməsiYaxşıTəkmilMəhdud (Ivy ilə)
Öyrənmə ƏyrisiOrtaDikOrta
Plugin-lərZəngin ekosistemZəngin ekosistemMəhdud
Çox-layihə DəstəyiYaxşıƏlaMəhdud

Maven Həyat Dövrü​

Maven-də üç daxili build həyat dövrü var:

  1. Default: Layihə yerləşdirilməsini idarə edir
  2. Clean: Layihə təmizlənməsini idarə edir
  3. Site: Layihə sənədləşdirməsinin yaradılmasını idarə edir

Hər həyat dövrü fazalardan ibarətdir:

  • validate: Layihə strukturunu təsdiq edir
  • compile: Mənbə kodunu kompile edir
  • test: Test-ləri işlədir
  • package: Kompile edilmiş kodu paketləyir
  • verify: İnteqrasiya test-lərini işlədir
  • install: Paketi lokal anbara quraşdırır
  • deploy: Paketi uzaq anbara kopyalayır

Ümumi Maven Əmrləri​

# Layihəni qur
mvn clean install

# Yalnız kompile et
mvn compile

# Test-ləri çalışdır
mvn test

# JAR/WAR yarat
mvn package

# Lokal anbara quraşdır
mvn install

# Uzaq anbara deploy et
mvn deploy

# Dependency-ləri göstər
mvn dependency:tree

# Layihə məlumatını göstər
mvn help:effective-pom

Asılılıq İdarəetməsi​

Maven-də asılılıqlar POM faylında təyin edilir:

<dependencies>
<!-- Kompile üçün lazım -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.0</version>
</dependency>

<!-- Yalnız test üçün -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>

<!-- Runtime üçün -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
<scope>runtime</scope>
</dependency>
</dependencies>

Dependency Scope-ları​

  • compile: Default scope, kompilyasiya və runtime üçün lazım
  • provided: Kompilyasiya üçün lazım, amma runtime-da container tərəfindən təmin edilir
  • runtime: Runtime üçün lazım, kompilyasiya üçün deyil
  • test: Test kompilyasiya və icra üçün lazım
  • system: Provided-a bənzər, amma JAR-ı əl ilə təmin etmək lazımdır
  • import: Yalnız POM dependency-lərdə, dependency management-i import etmək üçün

İstifadə Halları​

  • Enterprise Java Tətbiqetmələri: Böyük miqyaslı Java layihələri
  • Spring Boot Tətbiqetmələri: Mikroxidmətlər və veb tətbiqetmələr
  • Çox-modül Layihələr: Mürəkkəb layihə strukturları
  • CI/CD Pipeline: Avtomatik build və deployment
  • Kitabxana İnkişafı: Maven Central-a publish

Ən Yaxşı Təcrübələr​

  • Versiya nəzarətini düzgün idarə edin
  • Dependency-ləri minimal saxlayın
  • Maven Wrapper istifadə edin
  • Parent POM-lardan istifadə edin
  • Profile-ları müxtəlif mühitlər üçün istifadə edin
  • Plugin versiyalarını kilidləyin
  • Dependency scope-larını düzgün istifadə edin
  • Maven repository-ni təmiz saxlayın