JavaRush /Java blogi /Random-UZ /Maven haqida bilmoqchi bo'lgan hamma narsa. (2-qism) - "A...

Maven haqida bilmoqchi bo'lgan hamma narsa. (2-qism) - "A dan Zgacha Java loyihasi"

Guruhda nashr etilgan
Maven haqida hamma narsa: men mashq qilishni yaxshi ko'raman. Ba'zan nazariya haqida yozish qanchalik zerikarli bo'lishini tasavvur ham qila olmaysiz. Biroq, siz usiz hech qaerga borolmaysiz. Amaliyot boshqa masala, albatta. Endi men ilgari tasvirlab bergan buyruqlarni tezda ko'rib chiqamiz va biz tugatamiz)"A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-1-qism

pom.xml o'rnatilmoqda

Biz nazariya qilayotganimizda, biz juda yaxshi pom.xml ga ega bo'ldik:
Kodni ko'rish
<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>

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

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

   <scm>
       <connection>git@github.com:javarushcommunity/maven-demo.git</connection>
       <developerConnection>git@github.com:javarushcommunity/maven-demo.git</developerConnection>
       <url>https://github.com/javarushcommunity/maven-demo</url>
   </scm>

   <properties>
       <mockito.version>2.26.0</mockito.version>
       <junit.version>5.5.2</junit.version>
       <image.comparison.version>4.3.0</image.comparison.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>
       <javadoc.plugin.version>3.1.1</javadoc.plugin.version>
       <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>
       <dependency>
           <groupId>com.github.romankh3</groupId>
           <artifactId>image-comparison</artifactId>
           <version>${image.comparison.version}</version>
       </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>
- Lekin kompilyatsiya qiladigan biror narsaga ega bo'lish uchun uni u erga qo'shish kerak! Mantiqiymi? - Ha kapitan. bgg Shuning uchun, keling, metod va ikkita testga ega bo'lgan sinfni qo'shamiz. Keling, Maven uchun oddiy papka sxemasini yarataylik:
src asosiy java resurslari java resurslarini sinab ko'rish
src/main/java- da biz ishlaydigan paketni yaratamiz. Uni to'g'ri tuzish uchun boshida tashkilot nomini ( groupId ), keyin esa loyiha nomini qo'yish yaxshi bo'lar edi. Bizning holatda bu shunday bo'ladi: com.github.javarushcommunity.mavendemo Menga kelsak, bu juda yaxshi paket. Unda biz ImageComparator sinfini yaratamiz , buning uchun ikkita test yozamiz.

Mavenni va umuman loyihani IDEA ga ulash

G'oya bizning qaramligimizni tan olishi va ularni loyihada ishlatishni taklif qilishi uchun biz bir nechta ishlarni qilishimiz kerak:
  1. Kod manbalari qayerda va testlar qayerda bo'lishi haqida fikrni ayting.
  2. G'oyaga maven loyihasini qo'shing.
Birinchisiga erishish uchun siz ushbu belgini topishingiz kerak: ustiga bosing va Modullar"A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-2 qism bo'limiga o'ting . Keyinchalik, yaratilgan papkalarga quyidagi rasmda ko'rsatilganidek, kerakli markerni berishingiz kerak: Ya'ni:"A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-3-qism
  • src/main/java - Manbalar
  • src/main/resurslar - Resurslar
  • src/test/java - Testlar
  • src/test/resurslar - Test resurslari
  • maqsad - istisno
Bu barcha manbalar, manbalar, test, test manbalari va chiqarib tashlanganlarni As deb belgilash yozilgan qatorda topish mumkin . Jildni tanlang va uni mos ravishda belgilang. Va ikkinchi qadam - maven loyihasini IDEA-ga qo'shish, shunda u o'z sehrini ishlata oladi. Buni amalga oshirish uchun siz IDEA-da pom.xml faylini topishingiz va sichqonchaning o'ng tugmasi bilan Maven loyihasi sifatida qo'shish-ni tanlashingiz kerak . Va shunday bo'ladi, siz xursand bo'lasiz (: Shundan so'ng, "A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-4 qismo'ng tomonda Maven plitasi paydo bo'ladi , unda siz Maven buyruqlarini ochishingiz va ishlatishingiz mumkin."A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-5 qism

Biz "loyihamiz" uchun manbalar va testlarni yozamiz

Shunday qilib, biz Mavenni g'oyaga qo'shdik, endi biz uchun manba bo'ladigan sinfni tasvirlaymiz:

ImageComparator:

package com.github.javarushcommunity.mavendemo;

import com.github.romankh3.image.comparison.ImageComparison;
import com.github.romankh3.image.comparison.model.ImageComparisonResult;
import com.github.romankh3.image.comparison.model.ImageComparisonState;

import java.awt.image.BufferedImage;

/**
* Class created for answering, does two images the same or not.
*/
public class ImageComparator {

   /**
    * Method, which says the same images or not.
    *
    * @param image1 image1 for comparison
    * @param image2 image2 for comparison
    * @return return true, if images are the same, false - otherwise.
    */
   public boolean isTheSameImages(BufferedImage image1, BufferedImage image2) {
       //Create ImageComparison object
       ImageComparison imageComparison = new ImageComparison(image1, image2);

       //Compare images
       ImageComparisonResult imageComparisonResult = imageComparison.compareImages();

       //Check, that ImageComparisonState is MATCH:
       return ImageComparisonState.MATCH == imageComparisonResult.getImageComparisonState();
   }
}
Keling, shu maqsadda testlarni yarataylik. Sinov o'tkazadigan sinf bir xil paketda bo'lishi kerak, faqat src/test/java. Fikr buni biladi va siz uning imkoniyatlaridan foydalanishingiz mumkin. Buni amalga oshirish uchun faylning o'zida sinf nomini bosing va paydo bo'lgan lampochkada test yaratish-ni tanlang: "A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-6 qismBizdan kelajakdagi test uchun sozlamalarni tanlash so'raladi. Biz hech narsani o'rnatmaymiz, shunchaki "OK" tugmasini bosing: "A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-7 qismSinov uchun biz sinov rasmlaridan tasvirni taqqoslaymiz va ularni test resurslariga joylashtiramiz (src/test/resource). Shundan so'ng biz ikkita test yozamiz. Bu ikki rasm boshqacha ekanligini tekshiradi. Va boshqasida biz xuddi shu rasmni uzatamiz va ular bir xil ekanligiga javob kutamiz. Keyin biz quyidagi testni olamiz:
package com.github.javarushcommunity.mavendemo;

import com.github.romankh3.image.comparison.ImageComparisonUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.awt.image.BufferedImage;

@DisplayName("Unit-level testing for ImageComparator")
class ImageComparatorTest {

   private final ImageComparator comparator = new ImageComparator();

   @Test
   public void shouldConfirmImagesNotTheSame() {
       //given
       BufferedImage image1 = ImageComparisonUtil.readImageFromResources("image1.png");
       BufferedImage image2 = ImageComparisonUtil.readImageFromResources("image2.png");

       //when
       boolean theSameImages = comparator.isTheSameImages(image1, image2);

       //then
       Assertions.assertFalse(theSameImages);
   }

   @Test
   public void shouldConfirmImagesTheSame() {
       //given
       BufferedImage image1 = ImageComparisonUtil.readImageFromResources("image1.png");

       //when
       boolean theSameImages = comparator.isTheSameImages(image1, image1);

       //then
       Assertions.assertTrue(theSameImages);
   }
}
Sinovlar juda oddiy, men ular haqida to'xtalmayman. Agar siz qiziqsangiz, men bir kun kelib test haqida maqola yozaman (bu haqda sharhlarda yozing).

Maven buyruqlarini bajaring

Endi, jamoalarning ishini ko'rish uchun hamma narsa tayyor bo'lgach, Maven plaginida loyihamizni tanlang va unda Lifecycle ni oching : "A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-8 qismEndi kompilyatsiya tugmasini bosing va nima bo'lganini ko'ring: "A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-9-qismBundan ikkita xulosa chiqarishimiz mumkin:
  1. Bizning manbalarimiz tuzilgan va belgilangan yo'lga joylashtirilgan.
  2. Buyruq muvaffaqiyatli bo'ldi - BUILD SUCCESS.
Va haqiqatan ham, agar biz loyiha tuzilishiga o'tsak va u erda nima o'zgarganini ko'rsak, maqsadli papka qo'shilganligini ko'ramiz , biz hali ham o'rganishimiz va kompilyatsiya qilingan ImageComparator sinfimizni topishimiz mumkin : "A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-10-qismEndi men yangi paketni ishga tushirmoqchiman. noldan buyruq. Buni amalga oshirish uchun keling, ishga tushiramiz (ikki marta bosing) tozalash buyrug'i : Natijada, biz maqsadli"A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-11-qism papkani o'chirib tashlaganimizni aytishdi , kompilyatsiya buyrug'idan keyin yaratilgan barcha narsalarni o'z ichiga olgan . Buyruqni bajaramiz test : Testlar bajariladi: 0... lekin biz IKKIgacha yozdik. Ya'ni, negadir testlar o'tkazilmadi. Jonli kodlash shunday, keling, internetga o'tamiz) 5 daqiqalik googlingdan so'ng, JUnit5 bilan yana bitta plagin qo'shish kerakligini aniqladim: "A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-12-qism
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
Keling, uni loyihaga qo'shamiz, versiyani iloji boricha <properties/>- ga qo'yamiz va testni qayta boshlaymiz : "A dan Zgacha Java loyihasi": Maven haqida bilmoqchi bo'lgan hamma narsa.  2-13-qismEndi bu boshqa masala! Ikkita sinov muvaffaqiyatli o'tdi. Yong'in! Endi biz paketimizni ishga tushiramiz va maqsadli papkada jarnikni topamiz deb kutamiz : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 14Ya'ni, biz yana sinovlar o'tganligini ko'ramiz va shundan so'ng (loyihadagi hamma narsa yaxshi ekanligini kafolatlaymiz) biz loyihani to'plashimiz mumkin. Arxiv. Rasmda maven ishga tushirish jurnallarida va loyiha tuzilmasida arxiv mavjudligi ko'rsatilgan. Keyin biz o'rnatamiz . Ajoyib jamoa. Oh, unutishdan oldin. Toza ishga tushirish orqali yangi buyruqni bajarishdan oldin loyihani tozalash yaxshi amaliyot hisoblanadi . Bu sizni kelajakda bema'nilikdan qutqaradi - men buni o'z tajribamdan kafolatlayman))) Shuning uchun, birinchi navbatda biz ishlaymiz toza , va keyin o'rnating : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 15O'q qaerda joylashgan bo'lsa, siz mahalliy omborning qaerda joylashganligini aniq ko'rishingiz mumkin. Ular yozgan narsalarga asoslanib, bu mening yo'limda: /Users/roman_beskrovnyi/.m2 Va arxivning o'zi bu erda joylashgan bo'ladi: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT Va agar biz terminalga borib, arxiv joylashgan papkaga kirishga harakat qilsak, u o'sha erda bo'ladi: "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 16deploy bizga ko'rsatmaydi va sizga hali boshqalar kerak emas...

Chiqish o'rniga

Bugun biz Maven nima ekanligini, unda nima borligini, asosiy buyruqlar nima ekanligini tezda ko'rib chiqdik. Men buni sodda va misollar bilan etkazishga harakat qildim. Misol uchun barcha manba kodi maven-demo loyihasida GitHub-dagi JavaRush Community tashkilotida joylashgan . Barcha savollarni izohlarda yozing. Odatdagidek, JRTB loyihamiz uchun yangi kodni o'tkazib yubormaslik uchun Github-dagi hisobimga obuna bo'lishni maslahat beraman. Yana bir bor u o'lmagan. U shunchaki turg'unlikda edi))

Seriyadagi barcha materiallar ro'yxati ushbu maqolaning boshida.

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