คู่มือนี้จะแนะนำคุณเกี่ยวกับการใช้ Maven เพื่อสร้างโปรเจ็กต์ Java แบบง่ายๆ
คุณจะสร้างแอปพลิเคชันที่ระบุเวลาของวัน จากนั้นจึงสร้างแอปพลิเคชันนั้นด้วย Maven
https://raw.githubusercontent.com/spring-guides/getting-started-macros/main/prereq_editor_jdk_maven_buildtools.adoc
https://raw.githubusercontent.com/spring-guides/getting-started-macros/main/how_to_complete_this_guide.adoc
ก่อนอื่น คุณจะต้องตั้งค่าโปรเจ็กต์ Java เพื่อให้ Maven สร้าง เพื่อให้มุ่งเน้นไปที่ Maven ทำให้โปรเจ็กต์ง่ายที่สุดเท่าที่จะเป็นไปได้ในตอนนี้ สร้างโครงสร้างนี้ในโฟลเดอร์โครงการที่คุณเลือก
https://raw.githubusercontent.com/spring-guides/getting-started-macros/main/create_directory_structure_hello.adoc
ภายในไดเร็กทอรี src/main/java/hello
คุณสามารถสร้างคลาส Java ใดก็ได้ที่คุณต้องการ เพื่อรักษาความสอดคล้องกับส่วนที่เหลือของคู่มือนี้ ให้สร้างคลาสทั้งสองนี้: HelloWorld.java
และ Greeter.java
src/main/java/hello/HelloWorld.java
link : initial / src / main / java / hello / HelloWorld . java [ role = include ]
src/main/java/hello/Greeter.java
link : initial / src / main / java / hello / Greeter . java [ role = include ]
ตอนนี้คุณมีโปรเจ็กต์ที่พร้อมจะสร้างด้วย Maven แล้ว ขั้นตอนต่อไปคือการติดตั้ง Maven
Maven สามารถดาวน์โหลดเป็นไฟล์ zip ได้ที่ https://maven.apache.org/download.cgi ต้องใช้เฉพาะไบนารี่เท่านั้น ดังนั้นให้มองหาลิงก์ไปยัง apache-maven- {version} -bin.zip หรือ apache-maven- {version} -bin.tar.gz
เมื่อคุณดาวน์โหลดไฟล์ zip แล้ว ให้แตกไฟล์ลงในคอมพิวเตอร์ของคุณ จากนั้นเพิ่มโฟลเดอร์ bin ลงในเส้นทางของคุณ
หากต้องการทดสอบการติดตั้ง Maven ให้รัน mvn
จากบรรทัดคำสั่ง:
เอ็มวีเอ็น-วี
หากทุกอย่างเป็นไปด้วยดี คุณควรได้รับข้อมูลบางอย่างเกี่ยวกับการติดตั้ง Maven มันจะดูคล้ายกับ (แม้ว่าอาจจะแตกต่างเล็กน้อยจาก) ต่อไปนี้:
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00) หน้าแรกของ Maven: /home/dsyer/Programs/apache-maven เวอร์ชัน Java: 1.8.0_152 ผู้จำหน่าย: Azul Systems, Inc. หน้าแรกของ Java: /home/dsyer/.sdkman/candidates/java/8u152-zulu/jre ภาษาเริ่มต้น: en_GB, การเข้ารหัสแพลตฟอร์ม: UTF-8 ชื่อระบบปฏิบัติการ: "linux", เวอร์ชัน: "4.15.0-36-generic", โค้ง: "amd64", ตระกูล: "unix"
ยินดีด้วย! ตอนนี้คุณได้ติดตั้ง Maven แล้ว
ข้อมูล: คุณอาจต้องการพิจารณาใช้ Maven wrapper เพื่อป้องกันนักพัฒนาของคุณจากการมี Maven เวอร์ชันที่ถูกต้อง หรือต้องติดตั้งเลย โปรเจ็กต์ที่ดาวน์โหลดจาก Spring Initializr จะมี wrapper รวมอยู่ด้วย มันแสดงเป็นสคริปต์ mvnw
ในระดับบนสุดของโครงการของคุณซึ่งคุณรันแทน mvn
เมื่อติดตั้ง Maven แล้ว คุณต้องสร้างข้อกำหนดโปรเจ็กต์ Maven โครงการ Maven ถูกกำหนดด้วยไฟล์ XML ชื่อ pom.xml เหนือสิ่งอื่นใด ไฟล์นี้ให้ชื่อโปรเจ็กต์ เวอร์ชัน และการขึ้นต่อกันที่มีในไลบรารีภายนอก
สร้างไฟล์ชื่อ pom.xml ที่รากของโปรเจ็กต์ (เช่น วางไว้ข้างโฟลเดอร์ src
) และระบุเนื้อหาต่อไปนี้:
pom.xml
link:initial/pom.xml[role=include]
ด้วยข้อยกเว้นของอิลิเมนต์
ทางเลือก นี่เป็นไฟล์ pom.xml ที่ง่ายที่สุดที่เป็นไปได้ซึ่งจำเป็นในการสร้างโปรเจ็กต์ Java ประกอบด้วยรายละเอียดการกำหนดค่าโครงการดังต่อไปนี้:
> เวอร์ชันโมเดล POM (4.0.0 เสมอ)
. กลุ่มหรือองค์กรที่เป็นของโครงการ มักแสดงเป็นชื่อโดเมนกลับหัว
> ชื่อที่จะกำหนดให้กับส่วนไลบรารีของโปรเจ็กต์ (เช่น ชื่อของไฟล์ JAR หรือ WAR)
> เวอร์ชันของโครงการที่กำลังสร้าง
- วิธีการบรรจุโครงการ ค่าเริ่มต้นเป็น "jar" สำหรับแพ็คเกจไฟล์ JAR ใช้ "war" สำหรับการบรรจุไฟล์ WAR
บันทึก | เมื่อพูดถึงการเลือกรูปแบบการกำหนดเวอร์ชัน Spring แนะนำแนวทางการกำหนดเวอร์ชันเชิงความหมาย |
ณ จุดนี้ คุณได้กำหนดโปรเจ็กต์ Maven ขั้นต่ำแต่มีความสามารถไว้แล้ว
ตอนนี้ Maven พร้อมที่จะสร้างโครงการแล้ว คุณสามารถดำเนินการตามเป้าหมายวงจรการใช้งานบิวด์ต่างๆ ด้วย Maven ได้แล้วตอนนี้ รวมถึงเป้าหมายในการคอมไพล์โค้ดของโปรเจ็กต์ สร้างแพ็คเกจไลบรารี (เช่น ไฟล์ JAR) และติดตั้งไลบรารีในที่เก็บข้อมูลการขึ้นต่อกันของ Maven ในเครื่อง
หากต้องการลองใช้บิลด์ ให้ทำสิ่งต่อไปนี้ที่บรรทัดคำสั่ง:
mvn คอมไพล์
สิ่งนี้จะเรียกใช้ Maven โดยบอกให้ดำเนินการตามเป้าหมาย การคอมไพล์ เมื่อเสร็จแล้ว คุณควรค้นหาไฟล์ .class ที่คอมไพล์แล้วในไดเร็กทอรี target/classes
เนื่องจากคุณอาจต้องการแจกจ่ายหรือทำงานกับไฟล์ .class โดยตรง คุณอาจต้องการเรียกใช้เป้าหมาย แพ็ก เกจแทน:
แพ็คเกจเอ็มวีเอ็น
เป้าหมาย แพ็กเกจ จะคอมไพล์โค้ด Java ของคุณ รันการทดสอบ และเสร็จสิ้นโดยการรวมโค้ดไว้ในไฟล์ JAR ภายในไดเร็กทอรี เป้าหมาย ชื่อของไฟล์ JAR จะขึ้นอยู่กับ
และ
ของโปรเจ็กต์ ตัวอย่างเช่น เมื่อกำหนดไฟล์ pom.xml ขั้นต่ำจากก่อนหน้านี้ ไฟล์ JAR จะมีชื่อว่า gs-maven-0.1.0.jar
ในการรันไฟล์ JAR ให้รัน:
java -jar เป้าหมาย/gs-maven-0.1.0.jar
บันทึก | หากคุณเปลี่ยนค่าของ จาก "jar" เป็น "war" ผลลัพธ์จะเป็นไฟล์ WAR ภายในไดเร็กทอรี เป้าหมาย แทนที่จะเป็นไฟล์ JAR |
Maven ยังรักษาพื้นที่เก็บข้อมูลการขึ้นต่อกันบนเครื่องของคุณ (โดยปกติจะอยู่ในไดเร็กทอรี .m2/repository ในโฮมไดเร็กตอรี่ของคุณ) เพื่อการเข้าถึงการขึ้นต่อกันของโปรเจ็กต์อย่างรวดเร็ว หากคุณต้องการติดตั้งไฟล์ JAR ของโปรเจ็กต์ของคุณไปยังที่เก็บในเครื่องนั้น คุณควรเรียกใช้เป้าหมาย install
:
ติดตั้ง mvn
เป้าหมาย การติดตั้ง จะคอมไพล์ ทดสอบ และจัดทำแพ็คเกจโค้ดของโปรเจ็กต์ของคุณ จากนั้นคัดลอกลงในที่เก็บการขึ้นต่อกันในเครื่อง พร้อมสำหรับโปรเจ็กต์อื่นที่จะอ้างอิงเป็นการขึ้นต่อกัน
เมื่อพูดถึงการขึ้นต่อกัน ตอนนี้ก็ถึงเวลาประกาศการขึ้นต่อกันในบิลด์ Maven แล้ว
ตัวอย่าง Hello World แบบง่ายมีอยู่ในตัวเองโดยสมบูรณ์ และไม่ขึ้นอยู่กับไลบรารีเพิ่มเติมใดๆ อย่างไรก็ตาม แอปพลิเคชันส่วนใหญ่ขึ้นอยู่กับไลบรารีภายนอกเพื่อจัดการฟังก์ชันการทำงานทั่วไปและที่ซับซ้อน
ตัวอย่างเช่น สมมติว่านอกเหนือจากการพูดว่า "Hello World!" แล้ว คุณต้องการให้แอปพลิเคชันพิมพ์วันที่และเวลาปัจจุบัน แม้ว่าคุณสามารถใช้สิ่งอำนวยความสะดวกวันที่และเวลาในไลบรารี Java ดั้งเดิมได้ แต่คุณสามารถทำให้สิ่งต่าง ๆ น่าสนใจยิ่งขึ้นได้โดยใช้ไลบรารี Joda Time
ขั้นแรก เปลี่ยน HelloWorld.java ให้มีลักษณะดังนี้:
src/main/java/hello/HelloWorld.java
link : complete / src / main / java / hello / HelloWorld . java [ role = include ]
ที่นี่ HelloWorld
ใช้คลาส LocalTime
ของ Joda Time เพื่อรับและพิมพ์เวลาปัจจุบัน
หากคุณต้องรัน mvn compile
เพื่อสร้างโปรเจ็กต์ในตอนนี้ บิลด์จะล้มเหลวเนื่องจากคุณไม่ได้ประกาศ Joda Time เป็นการพึ่งพาการคอมไพล์ในบิลด์ คุณสามารถแก้ไขได้โดยเพิ่มบรรทัดต่อไปนี้ใน pom.xml (ภายในองค์ประกอบ
):
< dependencies >
link:complete/pom.xml[role=include]
dependencies >
บล็อกของ XML นี้ประกาศรายการการขึ้นต่อกันสำหรับโครงการ โดยเฉพาะอย่างยิ่งจะประกาศการพึ่งพาเดียวสำหรับไลบรารี Joda Time ภายในองค์ประกอบ
พิกัดการพึ่งพาถูกกำหนดโดยองค์ประกอบย่อยสามองค์ประกอบ:
- กลุ่มหรือองค์กรที่มีการขึ้นต่อกัน
- ไลบรารีที่จำเป็น
- เวอร์ชันเฉพาะของไลบรารีที่จำเป็น
ตามค่าเริ่มต้น การขึ้นต่อกันทั้งหมดจะถูกกำหนดขอบเขตเป็นการขึ้นต่อกันของ compile
นั่นคือควรจะพร้อมใช้งานในเวลาคอมไพล์ (และหากคุณกำลังสร้างไฟล์ WAR รวมถึงในโฟลเดอร์ /WEB-INF/libs ของ WAR) นอกจากนี้ คุณอาจระบุองค์ประกอบ
เพื่อระบุขอบเขตใดขอบเขตหนึ่งต่อไปนี้:
provided
- การขึ้นต่อกันที่จำเป็นสำหรับการคอมไพล์โค้ดโปรเจ็กต์ แต่จะถูกจัดเตรียมให้ขณะรันไทม์โดยคอนเทนเนอร์ที่รันโค้ด (เช่น Java Servlet API)
test
- การขึ้นต่อกันที่ใช้สำหรับการคอมไพล์และรันการทดสอบ แต่ไม่จำเป็นสำหรับการสร้างหรือรันโค้ดรันไทม์ของโปรเจ็กต์
ตอนนี้ ถ้าคุณรัน mvn compile
หรือ mvn package
Maven ควรแก้ไขการพึ่งพา Joda Time จากที่เก็บ Maven Central และการสร้างจะสำเร็จ
ขั้นแรกให้เพิ่ม JUnit เป็นการพึ่งพา pom.xml ของคุณในขอบเขตการทดสอบ:
link:complete/pom.xml[role=include]
จากนั้นสร้างกรณีทดสอบดังนี้:
src/test/java/hello/GreeterTest.java
link : complete / src / test / java / hello / GreeterTest . java [ role = include ]
Maven ใช้ปลั๊กอินชื่อ "surefire" เพื่อรันการทดสอบหน่วย การกำหนดค่าเริ่มต้นของปลั๊กอินนี้จะคอมไพล์และรันคลาสทั้งหมดใน src/test/java
โดยมีชื่อตรงกัน *Test
คุณสามารถรันการทดสอบบนบรรทัดคำสั่งเช่นนี้
การทดสอบเอ็มวีเอ็น
หรือเพียงแค่ใช้ขั้นตอน mvn install
ตามที่เราได้แสดงไว้ข้างต้น (มีคำจำกัดความวงจรการใช้งานโดยที่ "test" รวมอยู่ด้วยเป็นขั้นตอนใน "การติดตั้ง")
นี่คือไฟล์ pom.xml
ที่สมบูรณ์:
pom.xml
link:complete/pom.xml[role=include]
บันทึก | ไฟล์ pom.xml ที่เสร็จสมบูรณ์แล้วใช้ปลั๊กอิน Maven Shade เพื่อความสะดวกในการทำให้ไฟล์ JAR สามารถเรียกใช้งานได้ จุดเน้นของคู่มือนี้คือการเริ่มต้นใช้งาน Maven โดยไม่ได้ใช้ปลั๊กอินนี้โดยเฉพาะ |
ยินดีด้วย! คุณได้สร้างคำจำกัดความโปรเจ็กต์ Maven ที่เรียบง่ายแต่มีประสิทธิภาพสำหรับการสร้างโปรเจ็กต์ Java
คำแนะนำต่อไปนี้อาจเป็นประโยชน์เช่นกัน:
การสร้างโปรเจ็กต์ Java ด้วย Gradle
https://raw.githubusercontent.com/spring-guides/getting-started-macros/main/footer.adoc