JavaRush /จาวาบล็อก /Random-TH /ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven - "โครงการ Java จาก A...
Roman Beekeeper
ระดับ

ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven - "โครงการ Java จาก A ถึง Z"

เผยแพร่ในกลุ่ม
สวัสดีทุกคนเพื่อนรัก ฉันอยากจะขอโทษทันที ฉันจำได้ว่าฉันสัญญาว่าจะเขียนบทความสัปดาห์ละครั้ง ไม่ได้ผล ฉันแค่ไม่ค่อยได้นั่งเขียนอย่างถูกต้อง แต่ฉันไม่อยากทำแบบนั้นหรือแบบนั้น ฉันจะไม่คร่ำครวญถึงเหตุผลต่างๆ เพราะฉันไม่ต้องการมัน และคุณก็ไม่สนใจอย่างแน่นอน โครงการยังไม่ตาย มันอยู่ในภาวะชะงักงัน :) เราดำเนินต่อไป! และเนื้อหาในวันนี้จัดทำขึ้นเพื่อ Maven โดยเฉพาะ "โครงการ Java จาก A ถึง Z": ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven - 1

เรามาพูดถึงมาเวนกันดีกว่า

ก่อนอื่นคุณต้องติดตั้งมัน แน่นอน เนื่องจากฉันมี Mac ฉันจึงสามารถแสดงเฉพาะการติดตั้งสำหรับ Mac เท่านั้น มันเป็นเพียงโชคร้าย ฉันติดตั้งไว้นานแล้ว ดังนั้นคุณจะต้องทำเอง :)
คำแนะนำในการติดตั้ง Maven อยู่ในเอกสารนี้

ทำไมเราถึงต้องการมาเวน?

Maven เป็นเครื่องมือสร้างโครงการร่วมกับ Gradle และ Ant เพียงเพราะฉันจะใช้มันใน JRTB (JavaRush Telegram Bot) ฉันอยากจะแจ้งให้คุณทราบ ทุกวันนี้ ไม่มีโครงการใดถูกสร้างขึ้นโดยไม่มีระบบการประกอบ เนื่องจากจะทำให้ชีวิตของเราง่ายขึ้นหลายเท่า สิ่งนี้ช่วยให้:
  • • ดึงไลบรารีที่จำเป็นทั้งหมดขึ้นมา (ในแง่ของเครื่องมือสำหรับการประกอบ - การพึ่งพา (นั่นคือการพึ่งพา));
  • • กำหนดอย่างชัดเจนว่าโปรเจ็กต์จำเป็นต้องได้รับการคอมไพล์อย่างไร และเป็นสิ่งที่ (เช่น เราต้องการสร้างใน WAR หรือ JAR หรือ JAR ที่ปฏิบัติการได้)
  • • ตั้งค่าเวอร์ชันของโครงการไว้ในที่เดียวเพื่อให้ระบุระหว่างการประกอบ
  • • อธิบายโครงการและวงจรชีวิตของโครงการ
  • • เพิ่มปลั๊กอินที่เรียกว่า (เวอร์ชันดั้งเดิมของปลั๊กอินคำภาษาอังกฤษ);
  • • เผยแพร่ไลบรารีในพื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อให้โปรเจ็กต์อื่นสามารถดึงไลบรารีเหล่านั้นขึ้นมาเป็นสิ่งอ้างอิงได้
โดยทั่วไปแล้ว เขาทำหลายอย่างและล้วนมีประโยชน์ทั้งสิ้น ฉันจะพูดแบบนี้: สำหรับวิศวกรมือใหม่ไม่จำเป็นต้องรู้ฟังก์ชันการทำงานทั้งหมดตั้งแต่ปกจนถึงปก ในที่นี้ เช่นเดียวกับ git สิ่งสำคัญคือต้องเข้าใจพื้นฐานและแนวคิดทั่วไป นี่คือสิ่งที่เราจะทำ สำหรับเรา Maven เริ่มต้นด้วยไฟล์ XML ในรูทของโปรเจ็กต์ของเราที่เรียกว่าpom.xml เราจะทำทุกอย่างในทางปฏิบัติ ดังนั้นก่อนอื่นเราจะสร้างโปรเจ็กต์แรกของเราในชุมชน JavaRush เพื่อทำทุกอย่างอย่างชาญฉลาด ฉันจะใช้เทมเพลตสำหรับพื้นที่เก็บข้อมูลโดยที่สิ่งพื้นฐานที่ฉันอธิบายครั้งหนึ่งบน JR ได้รับการกำหนดค่าไว้ แล้ว หากต้องการสร้าง ให้ไปที่พื้นที่เก็บข้อมูลที่มีเทมเพลตแล้วคลิก ปุ่ม ใช้เทมเพลตนี้ : "โครงการ Java จาก A ถึง Z": ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven - 2ด้วยเหตุนี้ เราจึงมีพื้นที่เก็บข้อมูลแห่งแรกในชุมชนของเรา :) เราดาวน์โหลดโปรเจ็กต์ในเครื่อง หากต้องการทำสิ่งนี้ ผ่านแนวคิดนี้ ให้ไปที่File -> New -> Project from Version Control ในหน้าต่างที่ปรากฏขึ้น ให้ป้อนลิงก์ไปยังโปรเจ็กต์บน Github (ผลลัพธ์จะดีกว่าหากทุกคนสร้างโปรเจ็กต์เดียวกันแยกกันและทำตามขั้นตอนทั้งหมดกับฉัน): "โครงการ Java จาก A ถึง Z": ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven - 3คลิกโคลนและ โปรเจ็กต์ จะถูกโคลน

pom.xml เป็นส่วนหัวของทุกสิ่ง

ทุกสิ่งที่คุณต้องการอยู่ใน pom.xml ข้อมูลทั้งหมดเกี่ยวกับโปรเจ็กต์ ผู้พัฒนา และพื้นที่เก็บข้อมูลระยะไกลที่โปรเจ็กต์ถูกจัดเก็บ ในช่วงเริ่มต้น เราสนใจบล็อกต่อไปนี้: <project/> - นี่คือบล็อกหลักซึ่งมีข้อมูลทั้งหมดเกี่ยวกับโครงการ ส่วนอื่นๆ ทั้งหมดจะอยู่ในนั้นอย่างชัดเจนหรือโดยผ่านการเปลี่ยนผ่าน ภายในแท็กเปิดจะมีข้อความประมาณนี้:
<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">
และเหนือสิ่งอื่นใด บรรทัดถัดไปยังเขียนด้วย pomniks ทั้งหมด (คำสแลงน่าจะมาจาก pom.xml :))
<modelVersion>4.0.0</modelVersion>
แต่แล้วมันก็น่าสนใจมากขึ้น: เราจะอธิบายว่าเราระบุโครงการที่อนุสรณ์สถานของเราอธิบายได้อย่างไร ฉันจะอธิบายมันโดยใช้ห้องสมุดของฉันเป็นตัวอย่าง จากนั้นเราจะเพิ่มมันเข้าไปในหน่วยความจำของเรา ให้กับโปรเจ็กต์ที่สร้างขึ้นใหม่:
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Image Comparison</name>
สิ่งสำคัญที่นี่:
  • groupIdคือตัวระบุขององค์กรพัฒนาหรือวิศวกรแต่ละคน โดยปกติจะเป็นโดเมนในลำดับย้อนกลับ ตามตัวอย่าง บัญชี romankh3บน Github มีอธิบายไว้ที่นี่ มันสำคัญมาก. สมมติว่าสำหรับระบบนิเวศของ Spring มันคือcom.springframework วิธีนี้ทำให้คุณสามารถแยกแยะโปรเจ็กต์ดั้งเดิมจากทางแยกของคนอื่น หรือเพียงแค่ความบังเอิญของชื่อโปรเจ็กต์ก็ได้
  • artifaceIdเป็นชื่อของโปรเจ็กต์เฉพาะที่อธิบายไว้ในหน่วยความจำนี้อยู่แล้ว
  • เวอร์ชัน —เวอร์ชันของโปรเจ็กต์นี้ ทุกอย่างที่นี่ชัดเจนเหมือนวัน: เพิ่มฟังก์ชันใหม่ แก้ไขอันเก่า ปรับโครงสร้างใหม่หรือทำการเปลี่ยนแปลงอื่น ๆ - เพิ่มเวอร์ชัน
  • บรรจุภัณฑ์ - ที่นี่เราจะอธิบายว่า Maven ควรประกอบโครงการของเราอย่างไร ไม่ว่าจะใน Jar หรือในสงครามหรืออื่น
  • ชื่อ - นี่เป็นชื่อที่น่าพึงพอใจมากขึ้นสำหรับโครงการ
ยังมีบางสิ่งที่ไม่จำเป็นต้องกรอก - Maven จะทำงานโดยไม่มีสิ่งเหล่านั้น - แต่ถ้าคุณต้องการเผยแพร่ห้องสมุดเพื่อการใช้งานสาธารณะ ก็คุ้มค่าที่จะเพิ่มเข้าไป สิ่งเหล่านี้คืออะไร?
  • • พาธไปยังที่เก็บโปรเจ็กต์ ซึ่งสามารถดาวน์โหลดได้

    <url>https://romankh3.github.io/image-comparison/</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 ซึ่งอธิบายวิธีการเข้าถึงโครงการ:

    <scm>
    <connection>git@github.com:romankh3/image-comparison.git</connection>
    <developerConnection>git@github.com:romankh3/image-comparison.git</developerConnection>
     <url>https://github.com/romankh3/image-comparison</url>
    </scm>

หลังจากที่เราได้อธิบายข้อมูลทั่วไปแล้ว เราก็สามารถเพิ่มบล็อกที่มีการขึ้นต่อกัน:
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>2.26.0</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>5.5.2</version>
       <scope>test</scope>
   </dependency>
<dependency>
   	<groupId>com.github.romankh3</groupId>
   	<artifactId>image-comparison</artifactId>
   	<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
ที่นี่ฉันเพิ่มสองไลบรารีสำหรับการทดสอบ: จำเป็นเสมอ ดังที่คุณอาจสังเกตเห็นแล้ว การขึ้นต่อกันมีขอบเขต - ขอบเขต ในกรณีของเรา ระบุ testซึ่งหมายความว่าเราจะไม่เห็นการพึ่งพานี้ในโค้ดหลัก ถัดไป เพื่อให้ทุกอย่างดูสวยงาม คุณสามารถใช้แท็กแยกต่างหากเพื่อแสดง เวอร์ชัน <properties/> :
<properties>
   <mockito.version>2.26.0</mockito.version>
   <junit.version>5.5.2</junit.version>
   <image.comparison.version>4.3.0</image.comparison.version>
</properties>
ดังนั้นจึงสามารถอัปเดตบล็อกการพึ่งพาได้โดยใช้ โครงสร้าง ${PROPERTY_NAME} :
<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>
       <scope>test</scope>
   </dependency>
</dependencies>
ถัดมาคือ บล็อก <build/> ขนาดใหญ่ ซึ่งมี บล็อก <plugins/> ที่สำคัญ ซึ่งคุณสามารถปรับแต่งกระบวนการสร้างได้ คุณสามารถเพิ่มปลั๊กอินหนึ่งรายการขึ้นไป ภายใน บล็อก <plugins/>ได้ดังนี้:
<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-source-plugin</artifactId>
           <version>3.2.0</version>
           <executions>
               <execution>
                   <id>attach-sources</id>
                   <goals>
                       <goal>jar</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>
ที่นี่คุณ จะ เห็นว่าฉันได้เพิ่มปลั๊กอินสองตัว - maven-source-pluginและmaven-javadoc-plugin ปลั๊กอินแต่ละตัวมีการตั้งค่า คุณลักษณะ (พารามิเตอร์) ที่สามารถตั้งค่าได้ ดังนั้นจึงปรับแต่งปลั๊กอินได้ สิ่งนี้จะน่าสนใจสำหรับเราในอนาคต สำหรับตอนนี้เรามาจำและเดินหน้าต่อไปกันดีกว่า เช่นเดียวกับการขึ้นต่อกัน เราจะใส่เวอร์ชันปลั๊กอินใน<properties/ > จากนี้ คุณสามารถสร้างหน่วยความจำต่อไปนี้:
<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>

   <properties>
       <mockito.version>2.26.0</mockito.version>
       <junit.version>5.5.2</junit.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>
       <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>
   </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>

วงจรชีวิตของมาเวน

Maven มีวงจรชีวิตของ Maven เป็นเรื่องที่คุ้มที่จะบอกว่านี่เป็นชุดงานที่ Maven สามารถทำได้ อาจมีงานอื่นๆ นอกเหนือจากวงจรชีวิตของ maven มันเกี่ยวกับอะไร? มีชุดคำสั่งที่คุณสามารถประกอบโปรเจ็กต์ได้ ( สร้าง ... อีกครั้งแน่นอนกระดาษลอกลายจากภาษาอังกฤษ แต่ถ้าไม่มีสิ่งนี้ก็ไม่มีที่ไหนเลย) ลบบิลด์ที่ Maven รวบรวมไว้ติดตั้งใน Maven local เพื่อให้คุณสามารถ ดึงโปรเจ็กต์ขึ้นในเครื่องเป็นการพึ่งพาและอื่น ๆ ตอนนี้เรามาพูดถึงทุกสิ่งโดยละเอียดยิ่งขึ้น ก่อนที่จะเขียนความคิดเห็นของฉันเกี่ยวกับทีมเหล่านี้ ฉันตัดสินใจอ่านสิ่งที่พวกเขาเขียนบนอินเทอร์เน็ตเกี่ยวกับเรื่องนี้... และตระหนักว่าเป็นการยากที่จะอธิบาย สำหรับงานเบื้องต้นเราจำเป็นต้องมีคำสั่งหลายคำสั่ง มาอธิบายกันดีกว่า:
  • คอมไพล์ — คอมไพล์โครงการ นี่คือขั้นตอนแรก: ในระหว่างนั้น คุณสามารถดูว่ามีข้อผิดพลาดในการคอมไพล์ในโครงการหรือไม่ บางครั้งมีการก้าวกระโดดหลายอย่างในการทำงานใน IDEA ซึ่งเป็นเหตุผลว่าทำไมปัญหาในการคอมไพล์จึงปรากฏขึ้นในจุดที่ไม่ควรมีอยู่ ดังนั้นคำสั่งนี้จะจุด i ทั้งหมด
  • ทดสอบ - รันการทดสอบทั้งหมดที่ทำงานบน JUnit และอยู่ในตำแหน่งที่ Maven คาดหวังไว้ ( src/test/javaคือกัปตันของคุณ)
  • packageเป็นคำสั่งถัดไป ซึ่งรวมถึงสองคำสั่งก่อนหน้านี้ นั่นคือ คำสั่ง คอมไพล์ จะถูกเรียกใช้ครั้งแรกภายใน จากนั้นคำสั่ง ทดสอบจะถูกส่งไปยังโปรเจ็กต์ที่คอมไพล์แล้ว และหากทุกอย่างเรียบร้อยที่นี่ การสร้างไฟล์เก็บถาวรจะเริ่มต้นขึ้น (ไฟล์เก็บถาวรที่เราเลือกใน < packaging/>))
  • ติดตั้ง - เมื่อเราติดตั้ง Maven บนเครื่อง เรามีพื้นที่เก็บข้อมูล Git ในเครื่องที่เก็บไลบรารีที่เราดาวน์โหลดสำหรับโปรเจ็กต์ แต่ข้อดีของ Maven ก็คือเราสามารถใช้ คำสั่ง installเพื่อเพิ่มโปรเจ็กต์ของเราไปยังที่เก็บ Git ในเครื่อง และใช้โปรเจ็กต์ของเราในเครื่องเป็นการพึ่งพา ไม่เชื่อฉันเหรอ? ลองเลย :) วิธีนี้จะทำให้คุณเห็นได้อย่างรวดเร็วว่าโปรเจ็กต์ของคุณจะมีลักษณะอย่างไรเมื่อต้องพึ่งพาโปรเจ็กต์อื่น
  • การปรับใช้คือมงกุฎของทุกสิ่งที่เคยมีมา คำสั่งที่ให้ความสามารถในการเพิ่มโปรเจ็กต์ไม่เพียงแต่ในที่เก็บข้อมูลในเครื่องเป็นการติดตั้ง แต่ยังรวมถึงโปรเจ็กต์ระยะไกลด้วย ซึ่งทุกคนที่มีสิทธิ์เข้าถึงสามารถใช้เป็นข้อมูลอ้างอิงได้
  • ตรวจสอบ - คำสั่งที่จะตรวจสอบทุกอย่างและบอกว่าโครงการพร้อมสำหรับการใช้งานหรือไม่
  • สะอาด - แน่นอนว่าไฟล์ที่คอมไพล์และไฟล์เก็บถาวรจะต้องถูกเก็บไว้ที่ไหนสักแห่ง Maven มี โฟลเดอร์ เป้าหมาย สำหรับไฟล์ . นี่คือข้อมูลที่โครงการไม่ต้องการ และก่อนที่จะประกอบโปรเจ็กต์ใหม่จะเป็นการดีที่จะลบทุกอย่างที่เคยมีมาก่อน นี่คือสิ่งที่คำสั่ง cleanมีไว้เพื่อ

ปลั๊กอิน Maven

ฉันต้องการพูดคุยเกี่ยวกับปลั๊กอินเพิ่มเติม แต่บทความนี้ยาวแล้ว นี่จะเป็นการบ้านของคุณ ทำความเข้าใจว่ามันคืออะไรและใช้งานอย่างไร ในความต่อเนื่องของบทความเราจะจัดการกับ Maven ในทางปฏิบัติ

รายการเนื้อหาทั้งหมดในซีรีส์นี้อยู่ที่ตอนต้นของบทความนี้

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION