JavaRush /Java Blog /Random-ID /Segala sesuatu yang ingin Anda ketahui tentang Maven. (Ba...

Segala sesuatu yang ingin Anda ketahui tentang Maven. (Bagian 2) - "Proyek Java dari A sampai Z"

Dipublikasikan di grup Random-ID
Semua tentang Maven: awal saya suka berlatih. Anda bahkan tidak dapat membayangkan betapa membosankannya menulis tentang teori. Namun, Anda tidak bisa pergi kemana pun tanpa dia. Tentu saja, latihan adalah soal lain. Sekarang mari kita segera melalui perintah yang saya jelaskan sebelumnya, dan kita akan menyelesaikannya)"Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 1

Menyiapkan pom.xml

Saat kami berteori, kami mendapatkan pom.xml yang cukup bagus:
Lihat kode
<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 dapat mengkompilasi sesuatu, itu perlu ditambahkan di sana! Logis? - Ya kapten. bgg Oleh karena itu, mari tambahkan kelas yang memiliki metode dan dua pengujian untuknya. Mari buat skema folder biasa untuk Maven:
src sumber daya java utama menguji sumber daya java
Di src/main/java kita akan membuat paket tempat kita akan bekerja. Untuk menyusunnya dengan benar, sebaiknya cantumkan nama organisasi ( groupId ) di awal, lalu nama proyek. Dalam kasus kami akan menjadi seperti ini: com.github.javarushcommunity.mavendemo Bagi saya, ini adalah paket yang sangat bagus. Di dalamnya kita akan membuat kelas ImageComparator , yang mana kita akan menulis dua tes.

Menghubungkan Maven dan proyek secara keseluruhan ke IDEA

Agar ide tersebut dapat mengenali ketergantungan kita dan menawarkan untuk menggunakannya dalam proyek, kita perlu melakukan beberapa hal:
  1. Sampaikan gagasan di mana sumber kode akan ditempatkan dan di mana pengujian akan dilakukan.
  2. Tambahkan proyek pakar ke dalam ide tersebut.
Untuk mencapai yang pertama, Anda perlu menemukan ikon ini: "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 2Klik dan buka bagian Modul . Selanjutnya, Anda perlu memberi penanda yang diperlukan pada folder yang dibuat, seperti yang ditunjukkan pada gambar di bawah ini: "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 3Yaitu:
  • src/main/java - Sumber
  • src/main/resources - Sumber daya
  • src/test/java - Tes
  • src/test/resources - Sumber Daya Uji
  • target - Dikecualikan
Semua Sumber, Sumber Daya, Pengujian, Sumber Daya Pengujian, dan Pengecualian ini dapat ditemukan pada baris di mana Tandai seperti tertulis . Pilih folder dan beri label yang sesuai. Dan langkah kedua adalah menambahkan proyek maven ke IDEA sehingga dapat menghasilkan keajaiban. Untuk melakukan ini, Anda perlu mencari file pom.xml di IDEA dan klik kanan untuk memilih Tambahkan sebagai Proyek Maven . Dan itu saja, Anda akan bahagia (: Setelah ini, pelat Maven"Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 4 akan muncul di sebelah kanan , yang dapat Anda buka dan jalankan perintah Maven di dalamnya."Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 5

Kami menulis sumber dan pengujian untuk “proyek” kami

Jadi, kita menambahkan Maven ke dalam idenya, sekarang mari kita jelaskan kelas yang akan bertindak sebagai sumber bagi kita:

Pembanding Gambar:

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 tes untuk tujuan ini. Kelas yang diuji harus berada dalam paket yang sama, hanya di src/test/java. Idenya mengetahui hal ini, dan Anda dapat memanfaatkan kemampuannya. Untuk melakukannya, klik nama kelas di file itu sendiri dan pilih Buat tes pada bola lampu yang muncul: "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 6Kita akan diminta memilih pengaturan untuk tes selanjutnya. Kami tidak menginstal apa pun, cukup klik OK: "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 7Untuk pengujian kami, kami akan mengambil perbandingan gambar dari gambar pengujian dan menempatkannya di sumber daya pengujian (src/test/resource). Setelah ini kita akan menulis dua tes. Seseorang akan memeriksa apakah kedua gambar ini berbeda. Dan di sisi lain kita akan mengirimkan gambaran yang sama dan mengharapkan jawaban bahwa keduanya sama. Kemudian kita mendapatkan tes 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);
   }
}
Tesnya sangat sederhana, saya tidak akan membahasnya. Jika Anda tertarik, saya akan menulis artikel tentang pengujian suatu hari nanti (tulis di komentar).

Jalankan perintah Maven

Sekarang, ketika semuanya sudah siap untuk melihat pekerjaan tim, pilih proyek kami di plugin Maven dan buka Lifecycle di dalamnya : "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 8Sekarang klik kompilasi dan lihat apa yang terjadi: "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 9Dari sini kita dapat menarik dua kesimpulan:
  1. Sumber kami dikompilasi dan ditempatkan di jalur yang ditentukan.
  2. Perintahnya berhasil - BANGUN SUKSES.
Dan sungguh, jika kita pergi ke struktur proyek dan melihat apa yang berubah di sana, kita akan melihat bahwa folder target telah ditambahkan, yang masih dapat kita jelajahi dan temukan kelas ImageComparator yang telah kita kompilasi : "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 10Sekarang saya ingin memulai paket baru perintah dari awal. Untuk melakukan ini, mari kita jalankan (klik dua kali) perintah bersih : "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 11Hasilnya, kita diberitahu bahwa kita telah menghapus folder target , yang berisi semua yang dibuat setelah perintah kompilasi . Ayo jalankan perintah test : "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 12Tests run: 0... tapi kita tulis sebanyak DUA. Artinya, karena alasan tertentu pengujian tidak berjalan. Live codingnya seperti itu, ayo ke web) Setelah 5 menit googling, saya menemukan bahwa dengan JUnit5 Anda perlu menambahkan satu plugin lagi:
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
Mari tambahkan ke proyek, masukkan versinya ke <properties/> sebaik mungkin dan mulai ulang pengujian : "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 13Sekarang masalahnya berbeda! Dua tes dijalankan dan berhasil. Api! Sekarang kita menjalankan paket kita dan berharap bahwa kita akan menemukan jarnik di folder target : "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 14Artinya, kita melihat lagi bahwa tes telah lulus, dan setelah ini (menjamin bahwa semua yang ada di proyek itu baik) kita dapat mengumpulkan proyek tersebut ke dalam sebuah arsip. Gambar tersebut menunjukkan bahwa ada arsip di log peluncuran maven dan struktur proyek. Selanjutnya kita telah menginstal . Tim hebat. Oh, sebelum aku lupa. Membersihkan proyek sebelum menjalankan perintah baru dianggap sebagai praktik yang baik dengan menjalankan clean . Ini akan menyelamatkan Anda dari omong kosong di masa depan - saya jamin dari pengalaman saya sendiri))) Oleh karena itu, pertama-tama kita jalankan clean , lalu instal : "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 15Di mana panahnya berada, Anda dapat dengan jelas melihat di mana repositori lokal berada. Berdasarkan apa yang mereka tulis, ini sedang dalam perjalanan: /Users/roman_beskrovnyi/.m2 Dan arsipnya sendiri akan berlokasi di sini: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT Dan jika kita pergi ke terminal dan mencoba masuk ke folder tempat arsip berada, maka arsip itu akan ada di sana: "Proyek Java dari A hingga Z": Segala sesuatu yang ingin Anda ketahui tentang Maven.  Bagian 2 - 16penerapan tidak akan menunjukkan kepada kita, dan Anda belum memerlukan yang lain...

Alih-alih keluaran

Hari ini kita dengan cepat membahas apa itu Maven, apa yang ada di sana, apa saja perintah utama di sana. Saya mencoba menyampaikannya secara sederhana dan dengan contoh. Semua kode sumber untuk contoh terletak di organisasi Komunitas JavaRush di GitHub dalam proyek maven-demo . Tulis semua pertanyaan di komentar. Seperti biasa, saya sarankan Anda berlangganan akun saya di Github agar tidak ketinggalan kode baru untuk proyek JRTB kami. Sekali lagi, dia belum mati. Dia hanya dalam keadaan stasis))

Daftar semua materi dalam seri ini ada di awal artikel ini.

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