JavaRush /Java blogi /Random-UZ /Maven haqida bilmoqchi bo'lgan hamma narsa - "A dan Zgach...

Maven haqida bilmoqchi bo'lgan hamma narsa - "A dan Zgacha Java loyihasi"

Guruhda nashr etilgan
Hammaga salom aziz do'stlar. Darhol uzr so'ramoqchiman: haftada bir marta maqola yozishga va'da berganimni eslayman. Ishdan chiqmadi. Men shunchaki o'tirib, to'g'ri yozishga ulgurmadim, lekin buni u yoki bu tarzda qilishni xohlamayman. Sabablari haqida nola qilmayman, chunki bu menga kerak emas va sizni albatta qiziqtirmaydi. Loyiha o'lik emas, u turg'unlikda edi :) Davom etamiz! Va bugungi material Mavenga bag'ishlangan. "A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa - 1

Keling, Maven haqida gapiraylik

Avval siz uni o'rnatishingiz kerak. Albatta, menda Mac bor, men faqat Mac uchun o'rnatishni ko'rsata olaman. Bu shunchaki omadsizlik. Men uni uzoq vaqt oldin o'rnatganman, shuning uchun buni o'zingiz qilishingiz kerak bo'ladi :)
Mavenni o'rnatish bo'yicha ko'rsatmalar ushbu materialda .

Nega bizga Maven kerak?

Maven - bu Gradle va Ant bilan birgalikda loyiha yaratish vositasi. Men uni JRTB (JavaRush Telegram Bot) da ishlatganim uchun, men sizni yangilab bermoqchiman. Hozirgi vaqtda montaj tizimisiz biron bir loyiha yaratilmaydi, chunki u bizning hayotimizni ko'p marta soddalashtiradi. Bu quyidagilarga imkon beradi:
  • • barcha kerakli kutubxonalarni tortib oling (yig'ish uchun asboblar nuqtai nazaridan - bog'liqliklar (ya'ni, qaramlik));
  • • loyiha qanday va nimaga kompilyatsiya qilinishi kerakligini aniq aniqlash (masalan, biz WAR yoki JAR yoki bajariladigan JAR da qurishni xohlaymizmi);
  • • loyiha versiyasini yig'ish paytida ko'rsatilishi uchun bir joyga o'rnating;
  • • loyiha va uning hayot aylanishini tavsiflash;
  • • deb atalmish plaginlarni qo'shish (inglizcha Plugin so'zining an'anaviy versiyasi);
  • • kutubxonalarni umumiy omborda nashr eting, shunda boshqa loyihalar ularni bog'liqlik sifatida jalb qilishi mumkin.
Umuman olganda, u juda ko'p narsalarni qiladi va ularning barchasi foydalidir. Men buni aytaman: yangi boshlanuvchilar uchun barcha funktsiyalarni boshidan oxirigacha bilish shart emas. Bu erda, git bilan bo'lgani kabi, asosiy va umumiy tushunchalarni tushunish muhimdir. Biz shunday qilamiz. Biz uchun Maven pom.xml deb nomlangan loyihamizning ildizidagi XML faylidan boshlanadi . Biz hamma narsani amalda qilamiz, shuning uchun avval JavaRush hamjamiyatida birinchi loyihamizni yaratamiz. Hamma narsani oqilona qilish uchun men JR da bir marta tasvirlab bergan asosiy narsalar allaqachon sozlangan ombor uchun shablondan foydalanaman . Yaratish uchun shablon bilan omborga o'ting va " Ushbu shablondan foydalanish" tugmasini bosing : Natijada, bizning hamjamiyatimizda birinchi omborga egamiz :) Biz loyihani mahalliy sifatida yuklab olamiz. Buni amalga oshirish uchun g'oya orqali Fayl -> Yangi -> Versiya boshqaruvidan loyihaga o'ting . Ko'rsatilgan oynada Github-dagi loyihaga havolani kiriting (agar har bir kishi bir xil loyihani alohida yaratsa va men bilan barcha bosqichlardan o'tsa, natija yaxshiroq bo'ladi): Clone ni bosing va loyiha klonlanadi ."A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa - 2"A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa - 3

pom.xml hamma narsaning boshidir

Sizga kerak bo'lgan hamma narsa pom.xml da. Loyiha, uning ishlab chiquvchisi va loyiha qaysi masofaviy omborda saqlanganligi haqidagi barcha ma'lumotlar. Boshida bizni quyidagi bloklar qiziqtiradi: <loyiha/> - bu asosiy blok bo'lib, u loyiha haqidagi barcha ma'lumotlarni o'z ichiga oladi. Qolganlarning hammasi unda aniq yoki o'tishli bo'ladi. Ochilish yorlig'i ichida shunday bir narsa yozilgan:
<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">
Va boshqa hamma narsaning ustiga, keyingi qator ham barcha pomniklarda yoziladi (slang go'yoki pom.xml dan :)).
<modelVersion>4.0.0</modelVersion>
Ammo keyin qiziqroq bo'ladi: biz yodgorlik tasvirlangan loyihani qanday aniqlashimizni tasvirlaymiz. Kutubxonamdan misol qilib, men uni tasvirlab beraman va keyin uni xotiramizga, yangi yaratilgan loyihaga qo'shamiz:
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Image Comparison</name>
Bu erda asosiy narsa:
  • groupId - ishlab chiquvchi tashkilot yoki individual muhandisning identifikatori. Bu odatda teskari tartibda domen. Misol tariqasida Github-dagi romankh3 hisobi bu yerda tasvirlangan. Bu juda muhim. Aytaylik, Bahor ekotizimlari uchun bu com.springframework . Shunday qilib, siz asl loyihani boshqa birovning vilkasidan yoki shunchaki loyiha nomining mos kelishi bilan ajrata olasiz.
  • artifaceId allaqachon ushbu xotirada tasvirlangan muayyan loyiha nomidir.
  • versiya — ushbu loyihaning versiyasi. Bu erda hamma narsa kundek aniq: yangi funksiyalar qo'shildi, eskilarini tuzatdi, qayta tiklandi yoki boshqa o'zgarishlar kiritdi - versiyani oshirdi.
  • qadoqlash – bu yerda biz Maven loyihamizni qanday yig‘ishi kerakligini tasvirlaymiz. Jarda yoki urushda yoki boshqalarda .
  • nom - bu erda loyiha uchun yanada yoqimli nom.
Hali ham to'ldirish shart bo'lmagan ba'zi narsalar mavjud - Maven ularsiz ishlaydi - lekin agar siz kutubxonani ommaviy foydalanish uchun nashr qilishingiz kerak bo'lsa, ularni qo'shishga arziydi. Bu nima narsalar?
  • • yuklab olish mumkin bo'lgan loyiha omboriga yo'l

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

  • • ushbu loyiha tarqatiladigan litsenziya. Bundan tashqari, bir nechta bo'lishi mumkin, shuning uchun siz uni quyidagicha sozlashingiz kerak:

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

  • • loyihani yaratgan/yaratayotgan ishlab chiquvchilar haqida ma'lumot:

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

  • • loyihaga qanday kirish mumkinligini tavsiflovchi scm bloki:

    <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>

Umumiy ma'lumotni tavsiflaganimizdan so'ng, biz bog'liqliklar bilan blok qo'shishimiz mumkin:
<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>
Bu erda men sinov uchun ikkita kutubxona qo'shdim: ular har doim kerak. Siz allaqachon sezganingizdek, bog'liqliklar Scope - qamroviga ega. Bizning holatlarimizda test ko'rsatilgan , ya'ni biz asosiy kodda bu bog'liqlikni ko'rmaymiz. Keyin hamma narsani chiroyli qilish uchun <properties/> versiyalarini ko'rsatish uchun alohida tegdan foydalanishingiz mumkin :
<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>
Shunday qilib, qaramlik bloki ${PROPERTY_NAME} konstruksiyasi yordamida yangilanishi mumkin :
<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>
Keyinchalik katta <build/> bloki keladi , u muhim <plugins/> blokini o'z ichiga oladi , uning yordamida siz qurish jarayonini sozlashingiz mumkin. Siz <plugins/> blokiga bir yoki bir nechta plaginlarni qo'shishingiz mumkin , masalan:
<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>
Bu erda siz ikkita plaginni qo'shganimni ko'rishingiz mumkin - maven-source-plugin va maven-javadoc-plugin . Plaginlarning har birida sozlash mumkin bo'lgan sozlamalar, atributlar (parametrlar) mavjud va shu bilan plaginlarni sozlash mumkin. Bu biz uchun kelajakda qiziqarli bo'ladi. Hozircha eslaylik va davom etaylik. Bog'liqlar uchun bo'lgani kabi, biz plagin versiyalarini <properties/> ga joylashtiramiz . Bunga asoslanib, siz quyidagi xotirani yaratishingiz mumkin:
<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 hayot aylanishi

Mavenda maven hayot aylanishi kabi narsa bor. Aytish kerakki, bu maven bajarishi mumkin bo'lgan vazifalar to'plami. Maven hayot aylanishidan tashqari boshqa vazifalar ham bo'lishi mumkin. Bu nima haqida? Siz loyihani yig'ishingiz mumkin bo'lgan buyruqlar to'plami mavjud ( yana, albatta , ingliz tilidan kuzatuv qog'ozi, lekin busiz hech qanday joy yo'q), Maven to'plagan tuzilmalarni o'chiring, Maven mahalliy-ga o'rnating, shunda siz mahalliy ravishda loyihani qaramlik sifatida tortib oling va hokazo. Endi hamma narsa haqida batafsilroq gaplashamiz. Bu jamoalar haqida o'z fikrimni yozishdan oldin, internetda bu masala bo'yicha yozganlarini o'qishga qaror qildim... va buni ta'riflash juda qiyinligini angladim. Ish uchun, dastlabki ish uchun bizga bir nechta buyruqlar kerak . Keling, ularni tavsiflaymiz:
  • kompilyatsiya — loyihani tuzish. Bu birinchi bosqich: uning davomida loyihada kompilyatsiya xatolari bor yoki yo'qligini ko'rishingiz mumkin. Ba'zan IDEA-da ishlashda turli xil sakrashlar mavjud, shuning uchun kompilyatsiya muammolari mavjud bo'lmagan joyda paydo bo'ladi. Shunday qilib, bu buyruq barcha i harflarini qo'yadi.
  • test - JUnit-da ishlaydigan va Maven kutgan joyda joylashgan barcha testlarni amalga oshiradi ( src/test/java sizning kapitaningiz).
  • paket keyingi buyruq bo‘lib, oldingi ikkita buyruqni o‘z ichiga oladi: ya’ni kompilyatsiya buyrug‘i avval uning ichida ishga tushiriladi, so‘ngra test buyrug‘i kompilyatsiya qilingan loyihaga yuboriladi va bu yerda hammasi yaxshi bo‘lsa, arxiv yaratish boshlanadi. (biz tanlagan arxiv <packaging/>))
  • o'rnatish - biz Mavenni mashinaga o'rnatganimizda, biz loyihalar uchun yuklab oladigan kutubxonalarni saqlaydigan mahalliy Git omboriga egamiz. Ammo Mavenning go'zalligi shundaki, biz o'rnatish buyrug'idan foydalanib , loyihamizni mahalliy Git omboriga qo'shishimiz va loyihamizdan mahalliy sifatida qaramlik sifatida foydalanishimiz mumkin. Menga ishonmaysizmi? Sinab ko'ring :) Shunday qilib, loyihangiz qanday qilib boshqasiga qaramlik kabi ko'rinishini tezda ko'rishingiz mumkin.
  • deploy avval kelgan hamma narsaning tojidir. Loyihani o'rnatish sifatida nafaqat mahalliy omborga, balki masofaviy repozitoriyga ham qo'shish imkoniyatini beruvchi buyruq, u erdan kirish huquqiga ega bo'lgan har bir kishi undan qaramlik sifatida foydalanishi mumkin.
  • verify - hamma narsani tekshiradigan va loyihani joylashtirishga tayyorligini bildiruvchi buyruq.
  • toza – albatta, kompilyatsiya qilingan fayllar va arxiv biror joyda saqlanishi kerak. Mavenda buning uchun maqsadli papka mavjud . Bu loyihaga kerak bo'lmagan ma'lumotlar. Va loyihani qayta yig'ishdan oldin, oldin kelgan hamma narsani o'chirib tashlash yaxshi bo'lardi. Bu tozalash buyrug'i uchun mo'ljallangan .

Maven plaginlari

Men plaginlar haqida ko'proq gaplashmoqchi edim, lekin maqola allaqachon uzun. Bu sizning uy vazifangiz bo'ladi. Bu nima ekanligini va uni qanday ishlatishni tushuning. Maqolaning davomida biz Maven bilan amalda shug'ullanamiz.

Seriyadagi barcha materiallar ro'yxati ushbu maqolaning boshida.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION