JavaRush /בלוג Java /Random-HE /כל מה שרצית לדעת על מייבן. (חלק 2) - "פרויקט ג'אווה מא' ע...
Roman Beekeeper
רָמָה

כל מה שרצית לדעת על מייבן. (חלק 2) - "פרויקט ג'אווה מא' עד ת'"

פורסם בקבוצה
הכל על מייבן: ההתחלה שאני אוהב לתרגל. אתה אפילו לא יכול לדמיין כמה מייגע זה יכול להיות לפעמים לכתוב על תיאוריה. עם זאת, אתה לא יכול ללכת לשום מקום בלעדיה. תרגול זה עניין אחר, כמובן. עכשיו בואו נעבור במהירות על הפקודות שתיארתי בעבר, ונסתיים)"פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 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 משאבי ג'אווה ראשיים בדוק משאבי ג'אווה
ב- src/main/java ניצור חבילה בה נעבוד. כדי להרכיב אותו נכון, יהיה טוב לשים את שם הארגון ( groupId ) בהתחלה, ולאחר מכן את שם הפרויקט. במקרה שלנו זה יהיה כך: com.github.javarushcommunity.mavendemo מבחינתי, זו חבילה טובה מאוד. בו ניצור את המחלקה ImageComparator , עבורה נכתוב שני מבחנים.

חיבור מייבן והפרויקט כולו ל-IDEA

על מנת שהרעיון יוכל לזהות את התלות שלנו ולהציע להשתמש בהן בפרויקט, עלינו לעשות מספר דברים:
  1. ספר לרעיון היכן יהיו מקורות הקוד והיכן יהיו הבדיקות.
  2. הוסף פרויקט מייבן לרעיון.
כדי להשיג את הראשון, עליך למצוא את הסמל הזה: "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 2לחץ עליו ועבור לקטע מודולים . לאחר מכן, עליך לתת לתיקיות שנוצרו את הסמן הנדרש, כפי שמוצג באיור למטה: "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 3כלומר:
  • src/main/java - מקורות
  • src/main/resources - משאבים
  • src/test/java - בדיקות
  • src/test/resources - משאבי בדיקה
  • יעד - לא נכלל
ניתן למצוא את כל המקורות, המשאבים, הבדיקה, משאבי הבדיקה והאי הכללה הללו בשורה שבה כתוב סמן כפי . בחר תיקיה ותווית אותה בהתאם. והשלב השני הוא להוסיף את פרויקט מייבן ל-IDEA כדי שיוכל להפעיל את הקסם שלו. כדי לעשות זאת, עליך למצוא את קובץ pom.xml ב-IDEA וללחוץ לחיצה ימנית כדי לבחור הוסף כפרויקט Maven . וזהו, תשמחו (: לאחר מכן, "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 4תופיע לוחית Maven בצד ימין , שתוכל לפתוח ולהפעיל בה פקודות של 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. הרעיון יודע זאת, ואתה יכול לנצל את היכולות שלו. לשם כך יש ללחוץ על שם המחלקה בקובץ עצמו ולבחור באפשרות Create test על הנורה שמופיעה: "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 6נתבקש לבחור הגדרות למבחן העתידי. אנחנו לא מתקינים שום דבר, פשוט לחץ על אישור: "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 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 : "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 8כעת לחץ על קומפיל וראה מה קרה: "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 9מכאן נוכל להסיק שתי מסקנות:
  1. המקורות שלנו נאספו והוצבו בנתיב שצוין.
  2. הפקודה הצליחה - BUILD SUCCESS.
ובאמת, אם נלך למבנה הפרויקט ונסתכל על מה שהשתנה שם, נראה שנוספה תיקיית היעד , שעדיין נוכל לחקור ולמצוא את מחלקת ה-ImageComparator המהידור שלנו : "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 10עכשיו אני רוצה להתחיל חבילה חדשה פקודה מאפס. לשם כך, הבה נריץ (לחץ פעמיים) את הפקודה clean : "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 11כתוצאה מכך, נאמר לנו שמחקנו את תיקיית היעד , שהכילה את כל מה שנוצר לאחר פקודת הקומפילציה . בואו נריץ את מבחן הפקודה : "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 12בדיקות פועלות: 0... אבל כתבנו עד TWO. כלומר, משום מה הבדיקות לא רצו. קידוד חי הוא כזה, בוא נלך לרשת) לאחר 5 דקות של חיפושים בגוגל, גיליתי שעם JUnit5 צריך להוסיף תוסף אחד נוסף:
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
בואו נוסיף אותו לפרויקט, נכניס את הגרסה ל- <properties/> כמיטב יכולתנו ונתחיל את הבדיקה מחדש : "פרויקט ג'אווה מא' עד ת': כל מה שרצית לדעת על מייבן.  חלק 2 - 13עכשיו זה עניין אחר! שני בדיקות רצו והצליחו. אֵשׁ! עכשיו אנחנו מפעילים את החבילה שלנו ומצפים שנמצא את הג'רניק בתיקיית היעד : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 14כלומר, אנחנו רואים שוב שהבדיקות עברו, ואחרי זה (מבטיח שהכל בפרויקט טוב) נוכל לאסוף את הפרויקט לתוך ארכיון. האיור מראה שיש ארכיון ביומני ההשקה של מייבן ובמבנה הפרויקט. בשלב הבא יש לנו התקנה . קבוצה נהדרת. אה, לפני שאשכח. זה נחשב כתרגול טוב לנקות את הפרויקט לפני ביצוע פקודה חדשה על ידי הפעלת נקי . זה יחסוך ממך שטויות בעתיד - אני מבטיח את זה מניסיוני האישי))) לכן, קודם כל נריץ נקי , ולאחר מכן נתקין : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 15היכן נמצא החץ, אתה יכול לראות בבירור היכן נמצא המאגר המקומי. על סמך מה שהם כותבים, זה בדרך שלי: /Users/roman_beskrovnyi/.m2 והארכיון עצמו ימוקם כאן: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT ואם נלך למסוף וננסה להיכנס לתיקיה שבה נמצא הארכיון, אז הוא יהיה שם: "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 16הפריסה לא תראה לנו, ואתה לא צריך את האחרים עדיין...

במקום פלט

היום עברנו במהירות מה זה Maven, מה יש לו, מה הפקודות העיקריות שם. ניסיתי להעביר זאת בפשטות ובדוגמאות. כל קוד המקור של הדוגמה נמצא בארגון JavaRush Community ב-GitHub בפרויקט maven-demo . כתבו את כל השאלות בתגובות. כרגיל, אני מציע לך להירשם לחשבון שלי ב-Github כדי לא לפספס את הקוד החדש לפרויקט JRTB שלנו. שוב, הוא לא מת. הוא פשוט היה בקיפאון))

רשימה של כל החומרים בסדרה נמצאת בתחילת מאמר זה.

הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION