Maven haqqında hər şey: təcrübə etməyi sevdiyim başlanğıc . Nəzəriyyə haqqında yazmağın bəzən nə qədər yorucu olduğunu təsəvvür belə edə bilməzsiniz. Ancaq onsuz heç yerə gedə bilməzsən. Təcrübə, əlbəttə, başqa məsələdir. İndi əvvəllər təsvir etdiyim əmrləri tez keçirək və bitirəcəyik)"A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  Hissə 2 - 1

pom.xml qurulması

Nəzəriyyə hazırlayarkən olduqca yaxşı pom.xml əldə etdik:
Koda baxın
<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>
- Amma nəyisə tərtib etmək üçün onu ora əlavə etmək lazımdır! Məntiqi? - Bəli kapitan. bgg Buna görə də, metodu və onun üçün iki testi olan bir sinif əlavə edək. Maven üçün adi qovluq sxemi yaradaq:
src əsas java resursları java resurslarını sınayın
src/main/java- da biz işləyəcəyimiz paket yaradacağıq. Onu düzgün tərtib etmək üçün əvvəlcə təşkilatın adını ( groupId ), sonra isə layihənin adını qoymaq yaxşı olardı . Bizim vəziyyətimizdə bu belə olacaq: com.github.javarushcommunity.mavendemo Mənə gəlincə, bu çox yaxşı paketdir. Orada ImageComparator sinifini yaradacağıq , bunun üçün iki test yazacağıq.

Maven və bütövlükdə layihəni IDEA ilə əlaqələndirmək

İdeyanın asılılıqlarımızı tanıya bilməsi və onlardan layihədə istifadə etməyi təklif etməsi üçün bir neçə şeyi etməliyik:
  1. Kod mənbələrinin harada olacağını və testlərin harada olacağını söyləyin.
  2. İdeyaya maven layihəsi əlavə edin.
Birinciyə nail olmaq üçün bu işarəni tapmalısınız: "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-2 hissəüzərinə klikləyin və Modullar bölməsinə keçin . Bundan sonra, yaradılmış qovluqlara aşağıdakı şəkildə göstərildiyi kimi tələb olunan markeri verməlisiniz: "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-3 hissəYəni:
  • src/main/java - Mənbələr
  • src/main/resurs - Resurslar
  • src/test/java - Testlər
  • src/test/resurs - Test Resursları
  • hədəf - İstisna deyil
Bütün bu Mənbələr, Resurslar, Test, Test Resursları və İstisna edilənlər kimi işarələnin yazıldığı sətirdə tapıla bilər . Bir qovluq seçin və müvafiq olaraq etiketləyin. İkinci addım isə maven layihəsini IDEA-ya əlavə etməkdir ki, o öz sehrini işlədə bilsin. Bunu etmək üçün, siz IDEA-da pom.xml faylını tapmalı və Maven Layihəsi olaraq Əlavə et seçin . Və budur, siz xoşbəxt olacaqsınız (: Bundan sonra "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-4 hissəsağda Maven lövhəsi görünəcək , orada Maven əmrlərini açıb işlədə bilərsiniz."A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-5 hissə

"Layihəmiz" üçün mənbələr və testlər yazırıq

Beləliklə, biz Maven-i fikrə əlavə etdik, indi bizim üçün mənbə rolunu oynayacaq sinfi təsvir edək:

Şəkil Müqayisəçisi:

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();
   }
}
Bunun üçün testlər yaradaq. Test edən sinif eyni paketdə, yalnız src/test/java-da olmalıdır. İdeya bunu bilir və siz onun imkanlarından istifadə edə bilərsiniz. Bunu etmək üçün, faylın özündə sinif adının üzərinə klikləyin və görünən lampada test yarat seçin: "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-6 hissəBizdən gələcək test üçün parametrləri seçmək tələb olunacaq. Biz heç nə quraşdırmırıq, sadəcə OK düyməsini sıxırıq: "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-7 hissəTestimiz üçün biz test şəkillərindən şəkil müqayisəsini götürüb test resurslarına (src/test/resource) yerləşdirəcəyik. Bundan sonra iki test yazacağıq. Biri bu iki şəklin fərqli olduğunu yoxlayacaq. Digərində isə eyni şəkli ötürəcəyik və onların eyni olduğuna dair cavab gözləyəcəyik. Sonra aşağıdakı testi alırıq:
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);
   }
}
Testlər çox sadədir, onların üzərində dayanmayacağam. Əgər maraqlanırsınızsa, nə vaxtsa test haqqında məqalə yazacam (bu barədə şərhlərdə yazın).

Maven əmrlərini yerinə yetirin

İndi, komandaların işini görmək üçün hər şey hazır olduqda, Maven plaginində layihəmizi seçin və orada Lifecycle açın : "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-8 hissəİndi kompilyasiya düyməsini basın və nə baş verdiyinə baxın: "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-9 hissəBundan iki nəticə çıxara bilərik:
  1. Qaynaqlarımız yığılıb müəyyən olunmuş yola yerləşdirilib.
  2. Əmr uğurlu oldu - UĞUR TUR.
Və həqiqətən, layihə strukturuna keçsək və orada nələrin dəyişdiyinə baxsaq, hədəf qovluğunun əlavə edildiyini görərik, onu hələ də araşdırıb tərtib etdiyimiz ImageComparator sinfimizi tapa bilərik : "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-10 hissəİndi yeni paketə başlamaq istərdim. sıfırdan əmr. Bunu etmək üçün təmiz əmrini işə salaq (iki dəfə klikləyin) : "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  Hissə 2 - 11Nəticədə bizə deyilir ki, biz kompilyasiya əmrindən sonra yaradılan hər şeyi ehtiva edən hədəf qovluğu silmişik . Komanda testini yerinə yetirək : Testlər davam edir: 0... lakin biz İKİ qədər yazdıq. Yəni nədənsə testlər keçmədi. Canlı kodlaşdırma belədir, gəlin internetə gedək) 5 dəqiqəlik axtarışdan sonra gördüm ki, JUnit5 ilə daha bir plagin əlavə etməlisiniz: "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  Hissə 2 - 12
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
Gəlin onu layihəyə əlavə edək, versiyanı bacardıqca <properties/>- ə yerləşdirək və testi yenidən başladaq : "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  Hissə 2 - 13İndi başqa məsələdir! İki sınaq keçirildi və uğurlu oldu. Yanğın! İndi paketimizi işə salırıq və hədəf qovluqda jarnik tapacağımızı gözləyirik : "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  Hissə 2 - 14Yəni, testlərin keçdiyini bir daha görürük və bundan sonra (layihədə hər şeyin yaxşı olduğuna zəmanət veririk) layihəni bir yerə toplaya bilərik. arxiv. Şəkil göstərir ki, maven başlatma qeydlərində və layihə strukturunda bir arxiv var. Sonra quraşdırırıq . Əla komanda. Ah, unutmadan əvvəl. Təmiz işlətməklə yeni əmri yerinə yetirməzdən əvvəl layihəni təmizləmək yaxşı təcrübə hesab olunur . Bu, gələcəkdə sizi cəfəngiyyatdan xilas edəcək - mən buna öz təcrübəmdən zəmanət verirəm))) Buna görə də, ilk növbədə təmiz işlədirik , sonra quraşdırırıq : "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  Hissə 2 - 15Ox haradadır, yerli deponun harada yerləşdiyini aydın görə bilərsiniz. Yazdıqlarına əsasən, bu mənim yolumdadır: /Users/roman_beskrovnyi/.m2 Və arxiv özü burada yerləşəcək: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT Əgər biz terminala gedib arxivin yerləşdiyi qovluğa daxil olmağa çalışsaq, o, orada olacaq: "A-dan Z-yə Java layihəsi": Maven haqqında bilmək istədiyiniz hər şey.  2-ci hissə - 16yerləşdirmə bizə göstərməyəcək və başqalarına hələ ehtiyacınız yoxdur...

Çıxış əvəzinə

Bu gün Maven nədir, orada nədir, orada əsas əmrlər nələrdir tez keçdik. Bunu sadə və misallarla çatdırmağa çalışdım. Nümunə üçün bütün mənbə kodu maven-demo layihəsində GitHub-da JavaRush İcma təşkilatında yerləşir . Bütün sualları şərhlərdə yazın. Həmişə olduğu kimi, JRTB layihəmiz üçün yeni kodu qaçırmamaq üçün Github-dakı hesabıma abunə olmağı təklif edirəm . Bir daha deyirəm ki, o ölməyib. O, sadəcə olaraq durğun vəziyyətdə idi))

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