JavaRush /Java блогу /Random-KY /Maven жөнүндө билгиңиз келгендин баары. (2-бөлүк) - "Адан...
Roman Beekeeper
Деңгээл

Maven жөнүндө билгиңиз келгендин баары. (2-бөлүк) - "Адан Яга чейин Java долбоору"

Группада жарыяланган
Мавен жөнүндө бардыгы: мен машыгууну жакшы көрөм. Теория жөнүндө жазуу кээде канчалык түйшүктүү болоорун элестете да албайсың. Бирок, сен алсыз эч жакка бара албайсың. Практика, албетте, башка маселе. Эми мен мурда сүрөттөгөн буйруктарды тез аралап чыгалы, анан бүтүрөбүз)"Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-1-бөлүк

pom.xml орнотуу

Теориялап жатканда, биз абдан жакшы pom.xml алдык:
Кодду көрүү
<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>
- Бирок компиляциялоо үчүн бир нерсе болушу үчүн, аны ошол жерге кошуу керек! Логикалык? - Ооба капитан. bgg Ошондуктан, анын методу жана эки тести бар классты кошолу. Maven үчүн кадимки папка схемасын түзөлү:
src негизги Java ресурстары Java ресурстарын сынайт
src/main/javaда биз иштей турган пакетти түзөбүз. Аны туура түзүү үчүн башында уюмдун атын ( groupId ), андан кийин долбоордун атын жазсаңыз жакшы болмок. Биздин учурда мындай болот: com.github.javarushcommunity.mavendemo Мага келсек, бул абдан жакшы пакет. Анда биз ImageComparator классын түзөбүз , ал үчүн биз эки тест жазабыз.

Maven жана бүтүндөй долбоорду IDEAга туташтыруу

Идея биздин көз карандылыктарыбызды таанып, аларды долбоордо колдонууну сунуштай алышы үчүн, биз бир нече иштерди кылышыбыз керек:
  1. Код булактары жана тесттер кайда болоорун айтыңыз.
  2. Идеяга maven долбоорун кошуңуз.
Биринчиге жетүү үчүн бул сөлөкөттү табышыңыз керек: Аны басып, Модульдер"Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-2-бөлүк бөлүмүнө өтүңүз . Андан кийин, төмөнкү сүрөттө көрсөтүлгөндөй, түзүлгөн папкаларга керектүү маркерди беришиңиз керек: Башкача айтканда:"Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-3-бөлүк
  • src/main/java - Булактар
  • src/main/resources - Ресурстар
  • src/test/java - Тесттер
  • src/test/resources - Сыноо ресурстары
  • максаттуу - Чыгарылган
Бардык бул булактарды, ресурстарды, тестирлөө, сыноо ресурстарын жана алынып салынгандарды катары белгилөө деген саптан тапса болот . Папканы тандап, ага жараша белгилөө. Экинчи кадам - ​​IDEAга maven долбоорун кошуу, ал өзүнүн сыйкырын иштей алат. Бул үчүн, сиз IDEAдан pom.xml файлын таап, Maven долбоору катары кошууну тандоо үчүн оң баскычты чыкылдатыңыз . Бүттү, сиз бактылуу болосуз (: Андан кийин, "Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-4-бөлүкоң жакта Maven плитасы пайда болот , анда сиз Maven буйруктарын ачып, иштете аласыз."Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-5-бөлүк

Биз "долбоорубуз" үчүн булактарды жана тесттерди жазабыз

Ошентип, биз Мавенди идеяга коштук, эми биз үчүн булак боло турган классты сүрөттөп көрөлү:

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();
   }
}
Бул үчүн тесттерди түзөлү. Сыноочу класс бир пакетте, src/test/javaда гана болушу керек. Идея муну билет жана сиз анын мүмкүнчүлүктөрүнөн пайдалана аласыз. Бул үчүн, файлдын өзүндөгү класстын атын чыкылдатыңыз жана пайда болгон лампочкада тестти түзүү тандаңыз: "Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-6-бөлүкБизден келечектеги сыноо үчүн орнотууларды тандоо суралат. Биз эч нерсе орнотпойбуз, жөн гана OK баскычын чыкылдатыңыз: "Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-7-бөлүкБиздин сыноо үчүн биз тесттик сүрөттөрдөн сүрөт-салыштырууларды алып, аларды тесттик ресурстарга (src/test/resource) салабыз. Андан кийин биз эки тест жазабыз. Бул эки сүрөт ар башка экенин текшерет. Ал эми экинчисинде биз ошол эле сүрөттү жөнөтөбүз жана алар бирдей деп жооп күтөбүз. Андан кийин биз төмөнкү тестти алабыз:
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);
   }
}
Тесттер абдан жөнөкөй, мен аларга токтолбойм. Эгер сизди кызыктырса, мен качандыр бир күнү тестирлөө жөнүндө макала жазам (бул тууралуу комментарийге жазыңыз).

Maven буйруктарын аткарыңыз

Эми, командалардын ишин көрүүгө баары даяр болгондо, Maven плагинде биздин долбоорду тандап, андагы Lifecycle ачыңыз : "Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-8-бөлүкЭми компиляцияны чыкылдатыңыз жана эмне болгонун көрүңүз: "Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-9-бөлүкМындан биз эки жыйынтык чыгарсак болот:
  1. Биздин булактар ​​топтолуп, көрсөтүлгөн жолго жайгаштырылды.
  2. Команда ийгorктүү болду - ИЙГИЛИК КУРУ.
Жана чындап эле, эгерде биз долбоордун түзүмүнө кирип, ал жерде эмне өзгөргөнүн карасак, максаттуу папка кошулганын көрөбүз , аны биз дагы эле изилдеп, чогулткан ImageComparator классыбызды таба алабыз : "Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-10-бөлүкЭми мен жаңы пакетти баштагым келет. нөлдөн баштап буйрук. Бул үчүн, келгиле, таза команданы иштетели (эки жолу чыкылдатыңыз) : "Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-11-бөлүкНатыйжада, биз компиляция буйругунан кийин түзүлгөн бардык нерсени камтыган максаттуу папканы жок кылганыбызды айтышты . Келгиле, тестти иштетели : Сыноолор аткарылат: 0... бирок биз ЭКИге чейин жаздык. Башкача айтканда, эмнегедир тесттер өтпөй калды. Түз codeдоо ушундай, келгиле интернетке баралы) 5 мүнөттүк гуглингден кийин мен JUnit5 менен дагы бир плагинди кошуу керек экенин билдим: "Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-12-бөлүк
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
Келгиле, аны долбоорго кошолу, versionны колдон келишинче <касиеттер/> коюңуз жана тестти кайра баштаңыз : "Адан Яга Java долбоору": Maven жөнүндө билгиңиз келгендин баары.  2-13-бөлүкЭми бул башка маселе! Эки сынак өтүп, ийгorктүү болду. Fire! Эми биз пакетибизди иштетип , максаттуу папкадагы жарникти табабыз деп күтөбүз : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 14Башкача айтканда, биз сыноолор өткөнүн дагы бир жолу көрүп жатабыз жана андан кийин (долбоордогу бардыгы жакшы экендигине кепилдик беребиз) долбоорду чогулта алабыз. архив. Сүрөт maven ишке киргизүү журналдарында жана долбоордун структурасында архив бар экенин көрсөтүп турат. Кийинки биз орнотуп жатабыз . Улуу команда. Ой, унутуп кала электе. Жаңы буйрукту аткаруудан мурун таза иштетүү менен долбоорду тазалоо жакшы практика болуп эсептелет . Бул келечекте сизди куру сөздөн куткарат - мен буга өзүмдүн тажрыйбамдан кепилдик берем))) Ошондуктан, адегенде биз таза иштейбиз , анан орнотобуз : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 15Жебе кайда, жергorктүү репозиторий кайда жайгашканын так көрө аласыз. Алардын жазгандарына таянсак, бул менин жолум: /Users/roman_beskrovnyi/.m2 Ал эми архивдин өзү бул жерде жайгашат: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT Эгерде биз терминалга барып, архив жайгашкан папкага кирүүгө аракет кылсак, анда ал ошол жерде болот: "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 16жайгаштыруу бизге көрсөтпөйт, а сизге башкалардын кереги жок...

чыгаруунун ордуна

Бүгүн биз Maven деген эмне, ал жерде эмне бар, ал жердеги негизги буйруктар кандай экенин тез эле карап чыктык. Мен муну жөнөкөй жана мисалдар менен жеткирүүгө аракет кылдым. Мисал үчүн бардык булак codeу maven-demo долбоорунда GitHubдагы JavaRush Community уюмунда жайгашкан . Бардык суроолорду комментарийге жазыңыз. Адаттагыдай эле, биздин JRTB долбоорубуздун жаңы codeун өткөрүп жибербөө үчүн Githubдагы аккаунтума жазылууну сунуштайм . Дагы бир жолу, ал өлгөн жок. Ал жөн эле токтоп калган болчу))

Сериядагы бардык материалдардын тизмеси ушул макаланын башында.

Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION