JavaRush /Blog Java /Random-MS /Semua yang anda ingin tahu tentang Maven. (Bahagian 2) - ...

Semua yang anda ingin tahu tentang Maven. (Bahagian 2) - "Projek Java dari A hingga Z"

Diterbitkan dalam kumpulan
Semua tentang Maven: permulaan saya suka berlatih. Anda tidak boleh bayangkan betapa membosankannya kadang-kadang menulis tentang teori. Walau bagaimanapun, anda tidak boleh pergi ke mana-mana tanpa dia. Amalan adalah perkara lain, sudah tentu. Sekarang mari kita semak arahan yang saya nyatakan sebelum ini, dan kita akan selesaikan)"Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 1

Menyediakan pom.xml

Semasa kami membuat teori, kami mendapat pom.xml yang cukup bagus:
Lihat kod
<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>
- Tetapi untuk mempunyai sesuatu untuk disusun, ia perlu ditambah di sana! Logik? - Ya kapten. bgg Oleh itu, mari tambah kelas yang akan mempunyai kaedah dan dua ujian untuknya. Mari buat skema folder biasa untuk Maven:
src sumber java utama menguji sumber java
Dalam src/main/java kami akan membuat pakej di mana kami akan bekerja. Untuk mengarangnya dengan betul, adalah baik untuk meletakkan nama organisasi ( groupId ) pada permulaan, dan kemudian nama projek. Dalam kes kami, ia akan menjadi seperti ini: com.github.javarushcommunity.mavendemo Bagi saya, ini adalah pakej yang sangat baik. Di dalamnya kami akan mencipta kelas ImageComparator , yang mana kami akan menulis dua ujian.

Menghubungkan Maven dan projek secara keseluruhan kepada IDEA

Agar idea itu dapat mengenali kebergantungan kami dan menawarkan untuk menggunakannya dalam projek, kami perlu melakukan beberapa perkara:
  1. Beritahu idea di mana sumber kod akan berada dan di mana ujian akan berada.
  2. Tambahkan projek maven pada idea itu.
Untuk mencapai yang pertama, anda perlu mencari ikon ini: "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 2Klik padanya dan pergi ke bahagian Modul . Seterusnya, anda perlu memberikan folder yang dibuat penanda yang diperlukan, seperti yang ditunjukkan dalam rajah di bawah: "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 3Iaitu:
  • src/main/java - Sumber
  • src/utama/sumber - Sumber
  • src/test/java - Ujian
  • src/test/resources - Sumber Ujian
  • sasaran - Dikecualikan
Semua Sumber, Sumber, Ujian, Sumber Ujian dan Dikecualikan ini boleh didapati pada baris di mana Tandakan sebagai ditulis . Pilih folder dan labelkannya dengan sewajarnya. Dan langkah kedua ialah menambah projek maven ke IDEA supaya ia dapat melaksanakan keajaibannya. Untuk melakukan ini, anda perlu mencari fail pom.xml dalam IDEA dan klik kanan untuk memilih Tambah sebagai Projek Maven . Dan itu sahaja, anda akan gembira (: Selepas ini, plat Maven"Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 4 akan muncul di sebelah kanan , yang anda boleh buka dan jalankan arahan Maven di dalamnya."Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 5

Kami menulis sumber dan ujian untuk "projek" kami

Jadi, kami menambahkan Maven pada idea itu, sekarang mari kita huraikan kelas yang akan bertindak sebagai sumber untuk kami:

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();
   }
}
Mari buat ujian untuk tujuan ini. Kelas yang diuji mestilah dalam pakej yang sama, hanya dalam src/test/java. Idea ini mengetahui perkara ini, dan anda boleh memanfaatkan keupayaannya. Untuk melakukan ini, klik pada nama kelas dalam fail itu sendiri, dan pilih Cipta ujian pada mentol lampu yang muncul: "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 6Kami akan diminta untuk memilih tetapan untuk ujian masa hadapan. Kami tidak memasang apa-apa, cuma klik OK: "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 7Untuk ujian kami, kami akan mengambil perbandingan imej daripada imej ujian dan meletakkannya dalam sumber ujian (src/test/resource). Selepas ini kami akan menulis dua ujian. Seseorang akan menyemak bahawa kedua-dua gambar ini berbeza. Dan dalam yang lain kita akan menghantar gambar yang sama dan mengharapkan jawapan bahawa mereka adalah sama. Kemudian kami mendapat ujian berikut:
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);
   }
}
Ujiannya sangat mudah, saya tidak akan memikirkannya. Jika anda berminat, saya akan menulis artikel tentang ujian suatu hari nanti (tulis mengenainya dalam komen).

Laksanakan arahan Maven

Sekarang, apabila semuanya bersedia untuk melihat kerja pasukan, pilih projek kami dalam pemalam Maven dan buka Kitaran Hayat di dalamnya : "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 8Sekarang klik kompil dan lihat apa yang berlaku: "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 9Daripada ini kita boleh membuat dua kesimpulan:
  1. Sumber kami telah disusun dan diletakkan dalam laluan yang ditentukan.
  2. Perintah itu berjaya - BINA KEJAYAAN.
Dan benar-benar, jika kita pergi ke struktur projek dan melihat apa yang telah berubah di sana, kita akan melihat bahawa folder sasaran telah ditambah , yang masih boleh kita terokai dan mencari kelas ImageComparator kami yang disusun : "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 10Sekarang saya ingin memulakan pakej baharu perintah dari awal. Untuk melakukan ini, mari jalankan (klik dua kali) arahan bersih : "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 11Akibatnya, kami diberitahu bahawa kami telah memadam folder sasaran , yang mengandungi semua yang dibuat selepas arahan kompilasi . Mari jalankan ujian arahan : "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 12Ujian dijalankan: 0... tetapi kami menulis sebanyak DUA. Iaitu, atas sebab tertentu ujian tidak berjalan. Pengekodan langsung adalah seperti itu, mari pergi ke web) Selepas 5 minit googling, saya mendapati bahawa dengan JUnit5 anda perlu menambah satu lagi pemalam:
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
Mari tambahkannya pada projek, letakkan versi dalam <properties/> sebaik mungkin dan mulakan semula ujian : "Projek Java dari A hingga Z": Semua yang anda ingin ketahui tentang Maven.  Bahagian 2 - 13Sekarang ini perkara yang berbeza! Dua ujian telah dijalankan dan berjaya. Api! Sekarang kami menjalankan pakej kami dan menjangkakan bahawa kami akan menemui jarnik dalam folder sasaran : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 14Iaitu, kami melihat sekali lagi bahawa ujian telah berlalu, dan selepas ini (menjamin bahawa segala-galanya dalam projek itu baik) kami boleh mengumpul projek itu ke dalam arkib. Angka tersebut menunjukkan bahawa terdapat arkib dalam log pelancaran maven dan struktur projek. Seterusnya kami telah memasang . Pasukan yang hebat. Oh, sebelum saya terlupa. Ia dianggap sebagai amalan yang baik untuk membersihkan projek sebelum melaksanakan arahan baharu dengan menjalankan clean . Ini akan menyelamatkan anda daripada karut pada masa akan datang - Saya menjaminnya dari pengalaman saya sendiri))) Oleh itu, mula-mula kita jalankan clean , dan kemudian pasang : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 15Di mana anak panah itu, anda dapat melihat dengan jelas di mana repositori tempatan berada. Berdasarkan apa yang mereka tulis, ini dalam perjalanan saya: /Users/roman_beskrovnyi/.m2 Dan arkib itu sendiri akan terletak di sini: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- GAMBAR Dan jika kita pergi ke terminal dan cuba masuk ke folder tempat arkib itu terletak, maka ia akan berada di sana: "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 16deploy tidak akan menunjukkan kepada kami, dan anda tidak memerlukan yang lain lagi...

Daripada keluaran

Hari ini kami dengan cepat melalui apa itu Maven, apa yang ada, apakah arahan utama di sana. Saya cuba menyampaikan ini secara ringkas dan dengan contoh. Semua kod sumber untuk contoh terletak dalam organisasi Komuniti JavaRush di GitHub dalam projek maven-demo . Tulis semua soalan dalam komen. Seperti biasa, saya cadangkan anda melanggan akaun saya di Github supaya tidak terlepas kod baharu untuk projek JRTB kami. Sekali lagi, dia tidak mati. Dia hanya dalam keadaan stasis))

Senarai semua bahan dalam siri ini adalah pada permulaan artikel ini.

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