สวัสดีทุกคนเพื่อนรัก ฉันอยากจะขอโทษทันที ฉันจำได้ว่าฉันสัญญาว่าจะเขียนบทความสัปดาห์ละครั้ง ไม่ได้ผล ฉันแค่ไม่ค่อยได้นั่งเขียนอย่างถูกต้อง แต่ฉันไม่อยากทำแบบนั้นหรือแบบนั้น ฉันจะไม่คร่ำครวญถึงเหตุผลต่างๆ เพราะฉันไม่ต้องการมัน และคุณก็ไม่สนใจอย่างแน่นอน โครงการยังไม่ตาย มันอยู่ในภาวะชะงักงัน :) เราดำเนินต่อไป! และเนื้อหาในวันนี้จัดทำขึ้นเพื่อ Maven โดยเฉพาะ
เรามาพูดถึงมาเวนกันดีกว่า
ก่อนอื่นคุณต้องติดตั้งมัน แน่นอน เนื่องจากฉันมี 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 ในทางปฏิบัติ
GO TO FULL VERSION