JavaRush /Java Blog /Random-TL /Lahat ng gusto mong malaman tungkol kay Maven. (Bahagi 2)...

Lahat ng gusto mong malaman tungkol kay Maven. (Bahagi 2) - "Proyekto ng Java mula A hanggang Z"

Nai-publish sa grupo
Lahat tungkol kay Maven: ang simula gusto kong magsanay. Hindi mo maisip kung gaano nakakapagod minsan ang magsulat tungkol sa teorya. Gayunpaman, hindi ka makakapunta kahit saan kung wala siya. Ang pagsasanay ay isa pang bagay, siyempre. Ngayon ay mabilis nating talakayin ang mga utos na inilarawan ko dati, at tatapusin natin)"Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 1

Pagse-set up ng pom.xml

Habang nagte-teorya kami, nakakuha kami ng magandang pom.xml:
Tingnan ang code
<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>
- Ngunit upang magkaroon ng isang bagay na i-compile, kailangan itong idagdag doon! Lohikal? - Oo kapitan. bgg Samakatuwid, magdagdag tayo ng isang klase na magkakaroon ng pamamaraan at dalawang pagsubok para dito. Gumawa tayo ng isang regular na scheme ng folder para sa Maven:
src pangunahing mapagkukunan ng java subukan ang mga mapagkukunan ng java
Sa src/main/java gagawa tayo ng package kung saan tayo gagana. Upang mabuo ito nang tama, mainam na ilagay ang pangalan ng organisasyon ( groupId ) sa simula, at pagkatapos ay ang pangalan ng proyekto. Sa aming kaso ito ay magiging ganito: com.github.javarushcommunity.mavendemo Para sa akin, ito ay isang napakagandang pakete. Sa loob nito gagawa kami ng klase ng ImageComparator , kung saan magsusulat kami ng dalawang pagsubok.

Ikinonekta si Maven at ang proyekto sa kabuuan sa IDEA

Upang makilala ng ideya ang aming mga dependency at mag-alok na gamitin ang mga ito sa proyekto, kailangan naming gawin ang ilang bagay:
  1. Sabihin ang ideya kung saan ang mga pinagmumulan ng code at kung saan ang mga pagsubok.
  2. Magdagdag ng maven project sa ideya.
Upang makamit ang una, kailangan mong hanapin ang icon na ito: "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 2Mag-click dito at pumunta sa seksyong Mga Module . Susunod, kailangan mong bigyan ang nilikha na mga folder ng kinakailangang marker, tulad ng ipinapakita sa figure sa ibaba: "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 3Iyon ay:
  • src/main/java - Mga Pinagmulan
  • src/main/resources - Mga mapagkukunan
  • src/test/java - Mga Pagsubok
  • src/test/resources - Mga Mapagkukunan ng Pagsubok
  • target - Hindi kasama
Ang lahat ng Mga Pinagmulan, Mga Mapagkukunan, Pagsusulit, Mga Mapagkukunan ng Pagsubok at Hindi Kasama ay makikita sa linya kung saan nakasulat ang Markahan bilang . Pumili ng isang folder at lagyan ng label ito nang naaayon. At ang pangalawang hakbang ay idagdag ang maven project sa IDEA para magawa nito ang magic nito. Upang gawin ito, kailangan mong hanapin ang pom.xml file sa IDEA at i-right-click upang piliin ang Idagdag bilang Maven Project . At iyon lang, magiging masaya ka (: Pagkatapos nito, "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 4lilitaw ang isang Maven plate sa kanan , na maaari mong buksan at patakbuhin ang mga utos ng Maven dito."Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 5

Nagsusulat kami ng mga mapagkukunan at pagsubok para sa aming "proyekto"

Kaya, idinagdag namin si Maven sa ideya, ngayon ay ilarawan natin ang klase na magsisilbing mga mapagkukunan para sa amin:

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();
   }
}
Gumawa tayo ng mga pagsubok para sa layuning ito. Ang klase na sumusubok ay dapat nasa parehong pakete, sa src/test/java lamang. Alam ito ng ideya, at maaari mong samantalahin ang mga kakayahan nito. Upang gawin ito, mag-click sa pangalan ng klase sa file mismo at piliin ang Lumikha ng pagsubok sa bumbilya na lilitaw: "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 6Hihilingin sa amin na pumili ng mga setting para sa pagsubok sa hinaharap. Hindi kami nag-i-install ng anuman, i-click lang ang OK: "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 7Para sa aming pagsubok, kukuha kami ng paghahambing ng imahe mula sa mga pagsubok na larawan at ilagay ang mga ito sa mga mapagkukunan ng pagsubok (src/test/resource). Pagkatapos nito ay magsusulat kami ng dalawang pagsubok. Susuriin ng isa na magkaiba ang dalawang larawang ito. At sa iba pa ay ipapadala namin ang parehong larawan at inaasahan ang isang sagot na pareho sila. Pagkatapos makuha namin ang sumusunod na pagsubok:
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);
   }
}
Ang mga pagsubok ay napaka-simple, hindi ko sila aalalahanin. Kung interesado ka, magsusulat ako ng isang artikulo tungkol sa pagsubok sa ibang araw (isulat ang tungkol dito sa mga komento).

Isagawa ang mga utos ng Maven

Ngayon, kapag handa na ang lahat upang makita ang gawain ng mga koponan, piliin ang aming proyekto sa Maven plugin at buksan ang Lifecycle dito : "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 8Ngayon i-click ang compile at tingnan kung ano ang nangyari: "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 9Mula dito maaari tayong gumawa ng dalawang konklusyon:
  1. Ang aming mga mapagkukunan ay pinagsama-sama at inilagay sa tinukoy na landas.
  2. Ang utos ay matagumpay - BUMUO NG TAGUMPAY.
At talagang, kung pupunta tayo sa istraktura ng proyekto at titingnan kung ano ang nagbago doon, makikita natin na ang target na folder ay naidagdag na , na maaari pa rin nating galugarin at hanapin ang aming pinagsama-samang klase ng ImageComparator : "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 10Ngayon gusto kong magsimula ng isang bagong pakete utos mula sa simula. Upang gawin ito, patakbuhin natin (i-click nang dalawang beses) ang malinis na utos : "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 11Bilang resulta, sinabi sa amin na tinanggal namin ang target na folder , na naglalaman ng lahat ng bagay na nilikha pagkatapos ng utos ng compile . Patakbuhin natin ang command test : "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 12Tests run: 0... ngunit sumulat kami ng hanggang DALAWA. Iyon ay, sa ilang kadahilanan ay hindi tumakbo ang mga pagsubok. Ganyan ang live coding, pumunta tayo sa web) Pagkatapos ng 5 minutong pag-googling, nalaman kong sa JUnit5 kailangan mong magdagdag ng isa pang plugin:
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
Idagdag natin ito sa proyekto, ilagay ang bersyon sa <properties/> sa abot ng ating makakaya at i-restart ang pagsubok : "Proyekto ng Java mula A hanggang Z": Lahat ng gusto mong malaman tungkol kay Maven.  Bahagi 2 - 13Ngayon ay ibang bagay na! Dalawang pagsubok ang tumakbo at matagumpay. Apoy! Ngayon ay pinapatakbo namin ang aming pakete at inaasahan na mahahanap namin ang jarnik sa target na folder: "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 14Iyon ay, nakita namin muli na ang mga pagsubok ay lumipas na, at pagkatapos nito (ginagarantiya na ang lahat sa proyekto ay mabuti) maaari naming kolektahin ang proyekto sa isang archive. Ipinapakita ng figure na mayroong isang archive sa maven launch logs at ang istraktura ng proyekto. Susunod ay mayroon kaming pag-install . Mahusay na koponan. Oh, bago ko makalimutan. Itinuturing na mabuting kasanayan ang paglilinis ng proyekto bago magsagawa ng bagong utos sa pamamagitan ng pagpapatakbo ng malinis . Ito ay magliligtas sa iyo mula sa walang kapararakan sa hinaharap - ginagarantiya ko ito mula sa aking sariling karanasan))) Samakatuwid, una kaming tumakbo malinis , at pagkatapos ay i-install : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 15Kung nasaan ang arrow, maaari mong malinaw na makita kung saan matatagpuan ang lokal na imbakan. Batay sa kung ano ang kanilang isinulat, ito ay sa aking paraan: /Users/roman_beskrovnyi/.m2 At ang archive mismo ay matatagpuan dito: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT At kung pupunta tayo sa terminal at susubukang makapasok sa folder kung saan matatagpuan ang archive, naroroon ito: "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 16hindi ipapakita sa amin ang deploy, at hindi mo pa kailangan ang iba...

Sa halip na output

Ngayon ay mabilis naming napagdaanan kung ano si Maven, kung ano ang mayroon, kung ano ang mga pangunahing utos doon. Sinubukan kong ihatid ito nang simple at may mga halimbawa. Ang lahat ng source code para sa halimbawa ay matatagpuan sa JavaRush Community organization sa GitHub sa maven-demo project . Isulat ang lahat ng mga tanong sa mga komento. Gaya ng dati, iminumungkahi kong mag-subscribe ka sa aking account sa Github upang hindi makaligtaan ang bagong code para sa aming proyekto sa JRTB. Muli, hindi siya patay. Nasa stasis lang siya))

Ang isang listahan ng lahat ng mga materyales sa serye ay nasa simula ng artikulong ito.

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