JavaRush /Java Blogu /Random-AZ /Maven haqqında bilmək istədiyiniz hər şey - "A-dan Z-yə J...
Roman Beekeeper
Səviyyə

Maven haqqında bilmək istədiyiniz hər şey - "A-dan Z-yə Java layihəsi"

Qrupda dərc edilmişdir
Hər kəsə salam əziz dostlar. Dərhal üzr istəyirəm: xatırlayıram ki, həftədə bir dəfə məqalə yazacağıma söz vermişdim. alınmadı. Sadəcə oturub düzgün yazmağı bacarmadım, amma bunu bu və ya digər şəkildə etmək istəmirəm. Səbəblər barədə ağlamayacağam, çünki buna ehtiyacım yoxdur və əlbəttə ki, sizi maraqlandırmır. Layihə ölmədi, durğundu :) Davam edirik! Və bugünkü material Mavenə həsr olunub. "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey - 1

Gəlin Maven haqqında danışaq

Əvvəlcə onu quraşdırmalısınız. Təbii ki, məndə Mac var, mən yalnız Mac üçün quraşdırma göstərə bilərəm. Sadəcə uğursuzluqdur. Mən onu çoxdan quraşdırmışam, ona görə də bunu özünüz etməli olacaqsınız :)
Maven quraşdırmaq üçün təlimatlar bu materialdadır .

Niyə bizə Maven lazımdır?

Maven, Gradle və Ant ilə birlikdə layihə qurma vasitəsidir. Sadəcə onu JRTB-də (JavaRush Telegram Bot) istifadə edəcəyimə görə sizi bu günə qədər çatdırmaq istəyirəm. İndiki vaxtda montaj sistemi olmadan heç bir layihə yaradılmır, çünki həyatımızı dəfələrlə asanlaşdırır. Bu imkan verir:
  • • bütün lazımi kitabxanaları çıxarın (montaj üçün alətlər baxımından - asılılıqlar (yəni asılılıq));
  • • layihənin necə tərtib edilməli olduğunu dəqiq müəyyənləşdirin (məsələn, biz WAR və ya JAR-da və ya icra edilə bilən JAR-da qurmaq istəyirik);
  • • layihə versiyasını bir yerə qoyun ki, montaj zamanı göstərilsin;
  • • layihəni və onun həyat dövrünü təsvir etmək;
  • • qondarma plaginləri əlavə edin (ingiliscə Plugin sözünün ənənəvi versiyası);
  • • digər layihələrin onları asılılıq kimi çəkə bilməsi üçün kitabxanaları ortaq depoda dərc edin.
Ümumiyyətlə, o, çox şey edir və hamısı faydalıdır. Bunu deyəcəyəm: təcrübəsiz mühəndislər üçün başdan-başa bütün funksionallığı bilmək lazım deyil. Burada, git ilə olduğu kimi, əsasları və ümumi anlayışları başa düşmək vacibdir. Bizim edəcəyimiz budur. Bizim üçün Maven pom.xml adlı layihəmizin kökündəki XML faylı ilə başlayır . Biz hər şeyi praktikada edəcəyik, ona görə də əvvəlcə JavaRush İcmasında ilk layihəmizi yaradacağıq. Hər şeyi ağıllı şəkildə etmək üçün mən JR-də bir dəfə təsvir etdiyim əsas şeylərin artıq konfiqurasiya edildiyi depo üçün şablondan istifadə edəcəyəm . Yaratmaq üçün şablonla birlikdə depoya keçin və Bu şablondan istifadə et düyməsini sıxın : Nəticə olaraq icmamızda ilk depomuz var :) Layihəni lokal olaraq yükləyirik. Bunu etmək üçün, ideya vasitəsilə Fayl -> Yeni -> Versiya İdarəsindən Layihəyə keçin . Görünən pəncərədə Github-da layihəyə keçid daxil edin (hər kəs eyni layihəni ayrı-ayrılıqda yaradıb bütün addımları mənimlə keçsə, nəticə daha yaxşı olacaq): Klonla düyməsini basın və layihə klonlaşdırılır ."A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey - 2"A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey - 3

pom.xml hər şeyin başıdır

Sizə lazım olan hər şey pom.xml-dədir. Layihə, onun tərtibçisi və layihənin hansı uzaq depoda saxlandığı haqqında bütün məlumatlar. Başlanğıcda bizi aşağıdakı bloklar maraqlandırır: <project/> - bu, layihə haqqında bütün məlumatları ehtiva edən əsas blokdur. Bütün digərləri açıq və ya keçidli şəkildə orada olacaq. Açılış etiketinin içərisində belə bir şey deyilir:
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://maven.apache.org/POM/4.0.0"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                     http://maven.apache.org/xsd/maven-4.0.0.xsd">
Və hər şeyin üstündə növbəti sətir də bütün pomniklərdə yazılır (jarqon guya pom.xml-dəndir :)).
<modelVersion>4.0.0</modelVersion>
Ancaq sonra daha maraqlı olur: memorialımızın təsvir etdiyi layihəni necə müəyyənləşdirdiyimizi təsvir edəcəyik. Kitabxanamdan nümunə götürərək onu təsvir edəcəyəm, sonra onu yaddaşımıza, yeni yaradılmış layihəyə əlavə edəcəyik:
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Image Comparison</name>
Burada əsas şey:
  • groupId inkişaf təşkilatının və ya fərdi mühəndisin identifikatorudur. Bu adətən tərs qaydada domen olur. Nümunə olaraq, Github-da romankh3 hesabı burada təsvir edilmişdir. Bu çox vacibdir. Deyək ki, Bahar ekosistemi üçün bu, com.springframework-dir . Beləliklə, orijinal layihəni başqasının çəngəlindən və ya sadəcə olaraq layihə adının üst-üstə düşməsi ilə fərqləndirə bilərsiniz.
  • artifaceId artıq bu yaddaşda təsvir olunan xüsusi layihənin adıdır.
  • versiya —bu layihənin versiyası. Burada hər şey gün kimi aydındır: yeni funksionallıq əlavə edildi, köhnələri düzəldildi, refaktorlaşdırıldı və ya bəzi digər dəyişikliklər edildi - versiya artırıldı.
  • qablaşdırma - burada Maven-in layihəmizi necə yığması lazım olduğunu təsvir edirik. Ya jarda, ya müharibədə, ya da başqalarında .
  • ad - burada layihə üçün daha xoş ad.
Hələ də doldurulması tələb olunmayan bəzi şeylər var - Maven onlarsız işləyəcək - ancaq kitabxananı ictimai istifadə üçün dərc etməlisinizsə, mütləq onları əlavə etməyə dəyər. Bunlar nədir?
  • • layihənin repozitoriyasına gedən yol, onu haradan yükləmək olar

    <url>https://romankh3.github.io/image-comparison/</url>

  • • bu layihənin yayıldığı lisenziya. Üstəlik, birdən çox ola bilər və buna görə də onu bu şəkildə təyin etməlisiniz:

    <licenses>
     <license>
       <name>The Apache Software License, Version 2.0</name>
       <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
     </license>
    </licenses>

  • • layihəni yaradan/yaradan tərtibatçılar haqqında məlumat:

    <developers>
     <developer>
       <id>romankh3</id>
       <name>Roman Beskrovnyi</name>
       <email>roman.beskrovnyy@gmail.com</email>
     </developer>
    </developers>

  • • layihəyə necə daxil olmağı təsvir edən scm bloku:

    <scm>
    <connection>git@github.com:romankh3/image-comparison.git</connection>
    <developerConnection>git@github.com:romankh3/image-comparison.git</developerConnection>
     <url>https://github.com/romankh3/image-comparison</url>
    </scm>

Ümumi məlumatları təsvir etdikdən sonra asılılıqları olan bir blok əlavə edə bilərik:
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>2.26.0</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>5.5.2</version>
       <scope>test</scope>
   </dependency>
<dependency>
   	<groupId>com.github.romankh3</groupId>
   	<artifactId>image-comparison</artifactId>
   	<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Burada sınaq üçün iki kitabxana əlavə etdim: onlara həmişə ehtiyac var. Artıq qeyd etdiyiniz kimi, asılılıqların əhatə dairəsi var. Bizim vəziyyətimizdə test müəyyən edilmişdir , yəni biz bu asılılığı əsas kodda görməyəcəyik. Sonra hər şeyin gözəl görünməsi üçün <properties/> versiyalarını göstərmək üçün ayrıca etiketdən istifadə edə bilərsiniz :
<properties>
   <mockito.version>2.26.0</mockito.version>
   <junit.version>5.5.2</junit.version>
   <image.comparison.version>4.3.0</image.comparison.version>
</properties>
Beləliklə, asılılıq bloku ${PROPERTY_NAME} konstruksiyasından istifadə edərək yenilənə bilər :
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>${mockito.version}</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>${junit.version}</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>com.github.romankh3</groupId>
       <artifactId>image-comparison</artifactId>
       <version>${image.comparison.version}</version>
       <scope>test</scope>
   </dependency>
</dependencies>
Sonra böyük bir <build/> bloku gəlir , bu blokda mühüm <plugins/> bloku var və onun köməyi ilə siz qurma prosesini fərdiləşdirə bilərsiniz. Siz <plugins/> blokuna bir və ya bir neçə plagin əlavə edə bilərsiniz , məsələn:
<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-source-plugin</artifactId>
           <version>3.2.0</version>
           <executions>
               <execution>
                   <id>attach-sources</id>
                   <goals>
                       <goal>jar</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>
Burada iki plagin əlavə etdiyimi görə bilərsiniz - maven-source-pluginmaven-javadoc-plugin . Pluginlərin hər birinin təyin edilə bilən parametrləri, atributları (parametrləri) var və bununla da plaginləri fərdiləşdirir. Bu, gələcəkdə bizim üçün maraqlı olacaq. Hələlik xatırlayaq və davam edək. Asılılıqlar üçün olduğu kimi, biz də plagin versiyalarını <properties/> -ə yerləşdirəcəyik . Buna əsaslanaraq aşağıdakı yaddaşı yarada bilərsiniz:
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://maven.apache.org/POM/4.0.0"
        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.github.javarushcommunity</groupId>
   <artifactId>maven-demo</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>Maven Demo Project</name>

   <url>https://github.com/javarushcommunity/maven-demo/</url>

   <properties>
       <mockito.version>2.26.0</mockito.version>
       <junit.version>5.5.2</junit.version>
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <source.plugin.version>3.2.0</source.plugin.version>
   </properties>

   <dependencies>
       <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
           <version>${mockito.version}</version>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>org.junit.jupiter</groupId>
           <artifactId>junit-jupiter-api</artifactId>
           <version>${junit.version}</version>
           <scope>test</scope>
       </dependency>
   </dependencies>

   <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-source-plugin</artifactId>
               <version>${source.plugin.version}</version>
               <executions>
                   <execution>
                       <id>attach-sources</id>
                       <goals>
                           <goal>jar</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-javadoc-plugin</artifactId>
               <version>${javadoc.plugin.version}</version>
               <executions>
                   <execution>
                       <id>attach-javadocs</id>
                       <goals>
                           <goal>jar</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>
       </plugins>
   </build>
</project>

Maven həyat dövrü

Mavendə maven həyat dövrü kimi bir şey var. Bunun bir mavenin yerinə yetirə biləcəyi bir sıra tapşırıqlar olduğunu söyləməyə dəyər. Maven həyat dövründən başqa başqa vəzifələr də ola bilər. Söhbət nədən gedir? Bir layihə toplaya biləcəyiniz bir sıra əmrlər var ( qurmaq ... yenə də, əlbəttə ki, ingilis dilindən izləmə kağızı, lakin onsuz heç bir yer yoxdur), Maven-in topladığı quruluşları silin, Maven-də yerli quraşdıra bilərsiniz ki, yerli olaraq layihəni bir asılılıq kimi çıxarmaq və s. İndi hər şey haqqında daha ətraflı danışaq. Bu komandalar haqqında fikirlərimi yazmazdan əvvəl internetdə bu mövzuda yazdıqlarını oxumaq qərarına gəldim... və başa düşdüm ki, təsvir etmək çox çətindir. İş üçün, ilkin iş üçün bizə bir neçə əmr lazımdır . Onları təsvir edək:
  • kompile — layihəni tərtib etmək. Bu, birinci mərhələdir: onun zamanı layihədə kompilyasiya xətalarının olub olmadığını görə bilərsiniz. Bəzən IDEA-da işləmək üçün müxtəlif sıçrayışlar olur, buna görə də kompilyasiya problemləri olmamalı olduğu yerlərdə ortaya çıxır. Beləliklə, bu əmr bütün i-lərə nöqtə qoyacaq.
  • test - JUnit-də işləyən və Maven-in gözlədiyi yerdə yerləşən bütün testləri həyata keçirir ( src/test/java sizin kapitanınızdır).
  • paket əvvəlki ikisini özündə birləşdirən növbəti əmrdir: yəni kompilyasiya əmri əvvəlcə onun daxilində işə salınır, sonra test əmri tərtib edilmiş layihəyə göndərilir və burada hər şey qaydasındadırsa, arxivin yaradılması başlayır. (<qablaşdırma/>-da seçdiyimiz arxiv))
  • quraşdırma - Maven-i maşına quraşdırdığımız zaman layihələr üçün yüklədiyimiz kitabxanaları saxlayan yerli Git repozitorumuz var. Lakin Maven-in gözəlliyi ondadır ki, biz layihəmizi yerli Git deposuna əlavə etmək və layihəmizi yerli olaraq asılılıq kimi istifadə etmək üçün quraşdırma əmrindən istifadə edə bilərik. Mənə inanmırsan? Sınayın :) Beləliklə, layihənizin digərindən asılılığa necə bənzəyəcəyini tez görə bilərsiniz.
  • yerləşdirmək əvvəl gələn hər şeyin tacıdır. Layihəni yalnız quraşdırma kimi yerli depoya deyil, həm də uzaqdan olana əlavə etmək imkanı verən əmrdir, buradan çıxışı olan hər kəs ondan asılılıq kimi istifadə edə bilər.
  • doğrula - hər şeyi yoxlayacaq və layihənin yerləşdirməyə hazır olub olmadığını bildirəcək əmr.
  • təmiz - əlbəttə ki, tərtib edilmiş fayllar və arxiv haradasa saxlanmalıdır. Mavendə bunun üçün hədəf qovluğu var . Bu, layihə üçün lazım olmayan məlumatlardır. Layihəni yenidən yığmadan əvvəl, əvvəl gələn hər şeyi silmək yaxşı olardı. Təmiz əmri bunun üçündür .

Maven Pluginləri

Pluginlər haqqında daha çox danışmaq istədim, amma məqalə artıq uzundur. Bu sizin ev tapşırığınız olacaq. Bunun nə olduğunu və necə istifadə olunacağını anlayın. Məqalənin davamında Maven ilə praktikada məşğul olacağıq.

Serialdakı bütün materialların siyahısı bu məqalənin əvvəlindədir.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION