1. บทนำ
Maven เป็นหนึ่งในเครื่องมือสร้างที่ได้รับความนิยมมากที่สุดในระบบนิเวศของ Java และหนึ่งในคุณสมบัติหลักของมันคือการจัดการการพึ่งพา
ในบทความนี้เราจะอธิบายและสำรวจกลไกที่ช่วยในการจัดการการพึ่งพาสกรรมกริยาในโครงการ Maven - ขอบเขตการพึ่งพา
2. การพึ่งพาสกรรมกริยา
พูดง่ายๆก็คือมีการอ้างอิงสองประเภทใน Maven โดยตรงและสกรรมกริยา
การอ้างอิงโดยตรงคือสิ่งที่รวมอยู่ในโครงการอย่างชัดเจน สิ่งเหล่านี้สามารถรวมอยู่ในโครงการโดยใช้ แท็ก:
junit junit 4.12
ในทางกลับกันการพึ่งพาสกรรมกริยาคือการอ้างอิงที่จำเป็นโดยการอ้างอิงโดยตรงของเรา การอ้างอิงที่จำเป็นจะรวมอยู่ในโครงการของเราโดยอัตโนมัติโดย Maven
เราสามารถแสดงรายการการอ้างอิงทั้งหมดรวมถึงการอ้างอิงแบบสกรรมกริยาในโครงการโดยใช้คำสั่ง: mvn dependency: tree
3. ขอบเขตการพึ่งพา
ขอบเขตการพึ่งพาสามารถช่วย จำกัด การส่งผ่านของการอ้างอิงและปรับเปลี่ยนคลาสพา ธ สำหรับงานที่สร้างขึ้นที่แตกต่างกัน Maven มี 6 เริ่มต้นการพึ่งพาขอบเขต
และสิ่งสำคัญคือต้องเข้าใจว่าแต่ละขอบเขตยกเว้นการนำเข้าจะมีผลกระทบต่อการอ้างอิงสกรรมกริยา
3.1. รวบรวม
นี่คือขอบเขตเริ่มต้นเมื่อไม่มีการระบุขอบเขตอื่น ๆ
การอ้างอิงกับขอบเขตนี้มีอยู่ในคลาสพา ธ ของโปรเจ็กต์ในงานบิลด์ทั้งหมดและจะแพร่กระจายไปยังโปรเจ็กต์ที่ขึ้นต่อกัน
ที่สำคัญกว่านั้นการอ้างอิงเหล่านี้ยังเป็นสกรรมกริยา:
commons-lang commons-lang 2.6
3.2. ให้
ขอบเขตนี้ใช้เพื่อทำเครื่องหมายการอ้างอิงที่ควรจัดเตรียมไว้ที่รันไทม์โดย JDK หรือคอนเทนเนอร์ดังนั้นชื่อ
กรณีการใช้งานที่ดีสำหรับขอบเขตนี้คือเว็บแอปพลิเคชันที่ใช้งานในคอนเทนเนอร์บางส่วนซึ่งคอนเทนเนอร์มีไลบรารีอยู่แล้ว
ตัวอย่างเช่นเว็บเซิร์ฟเวอร์ที่ให้บริการ Servlet API ที่รันไทม์อยู่แล้วดังนั้นในโครงการของเราการอ้างอิงเหล่านั้นสามารถกำหนดได้ด้วยขอบเขตที่ให้ไว้ :
javax.servlet servlet-api 2.5 provided
การอ้างอิงที่ระบุจะพร้อมใช้งานเฉพาะในเวลาคอมไพล์และในคลาสพา ธ ทดสอบของโปรเจ็กต์ ยิ่งไปกว่านั้นพวกเขาไม่ได้เป็นสกรรมกริยา
3.3. รันไทม์
จำเป็นต้องมีการอ้างอิงกับขอบเขตนี้ในรันไทม์แต่ไม่จำเป็นสำหรับการคอมไพล์โค้ดโครงการ ด้วยเหตุนี้การอ้างอิงที่ทำเครื่องหมายด้วยขอบเขตรันไทม์จะปรากฏในรันไทม์และคลาสพา ธ ทดสอบ แต่จะหายไปจากคลาสพา ธ คอมไพล์
ตัวอย่างที่ดีของการอ้างอิงที่ควรใช้ขอบเขตรันไทม์คือไดรเวอร์ JDBC:
mysql mysql-connector-java 6.0.6 runtime
3.4. ทดสอบ
ขอบเขตนี้ใช้เพื่อระบุว่าไม่จำเป็นต้องมีการพึ่งพาในรันไทม์มาตรฐานของแอปพลิเคชัน แต่ใช้เพื่อการทดสอบเท่านั้น การอ้างอิงการทดสอบไม่ได้เป็นสกรรมกริยาและมีอยู่สำหรับคลาสพา ธ การทดสอบและการดำเนินการเท่านั้น
กรณีการใช้งานมาตรฐานสำหรับขอบเขตนี้กำลังเพิ่มไลบรารีทดสอบเช่น JUnit ในแอปพลิเคชันของเรา:
junit junit 4.12 test
3.5. ระบบ
ขอบเขตของระบบคล้ายกับขอบเขตที่ให้ไว้มาก ความแตกต่างที่สำคัญระหว่างขอบเขตทั้งสองนี้คือระบบต้องการให้เราชี้ไปที่โถเฉพาะบนระบบโดยตรง
สิ่งสำคัญที่ต้องจำไว้คือการสร้างโครงการที่มีการอ้างอิงขอบเขตของระบบอาจล้มเหลวในเครื่องอื่นหากไม่มีการอ้างอิงหรืออยู่ในสถานที่ที่แตกต่างจากที่systemPathชี้ไปที่:
com.baeldung custom-dependency 1.3.2 system ${project.basedir}/libs/custom-dependency-1.3.2.jar
3.6. นำเข้า
ขอบเขตนี้ถูกเพิ่มใน Maven 2.0.9 และใช้ได้เฉพาะกับปอมประเภทการพึ่งพาเท่านั้น เราจะพูดเพิ่มเติมเกี่ยวกับประเภทของการอ้างอิงในบทความในอนาคต
การนำเข้าบ่งชี้ว่าการอ้างอิงนี้ควรถูกแทนที่ด้วยการอ้างอิงที่มีประสิทธิภาพทั้งหมดที่ประกาศไว้ใน POM:
com.baeldung custom-project 1.3.2 pom import
4. ขอบเขตและความเปลี่ยนแปลง
ขอบเขตการพึ่งพาแต่ละรายการมีผลต่อการพึ่งพาสกรรมกริยาในแบบของตัวเอง ซึ่งหมายความว่าการอ้างอิงสกรรมกริยาที่แตกต่างกันอาจจบลงในโครงการด้วยขอบเขตที่แตกต่างกัน
อย่างไรก็ตามการอ้างอิงกับขอบเขตที่จัดไว้ให้และการทดสอบจะไม่ถูกรวมอยู่ในโครงการหลัก
จากนั้น:
- สำหรับขอบเขตการคอมไพล์การอ้างอิงทั้งหมดที่มีขอบเขตรันไทม์จะถูกดึงเข้ามาพร้อมกับขอบเขตรันไทม์ในโครงการและการอ้างอิงทั้งหมดที่มีขอบเขตการคอมไพล์จะถูกดึงเข้ามาพร้อมกับขอบเขตการคอมไพล์ในโปรเจ็กต์
- สำหรับขอบเขตที่ระบุทั้งรันไทม์และการอ้างอิงขอบเขตการคอมไพล์จะถูกดึงเข้ามาพร้อมกับขอบเขตที่ให้ไว้ในโปรเจ็กต์
- สำหรับขอบเขตการทดสอบทั้งรันไทม์และขอบเขตคอมไพล์การอ้างอิงสกรรมกริยาจะถูกดึงเข้ามาพร้อมกับขอบเขตการทดสอบในโครงการ
- สำหรับขอบเขตรันไทม์ทั้งรันไทม์และขอบเขตการคอมไพล์การขึ้นต่อกันจะถูกดึงเข้ามาพร้อมกับขอบเขตรันไทม์ในโปรเจ็กต์
5. สรุป
ในบทช่วยสอนฉบับย่อนี้เรามุ่งเน้นไปที่ขอบเขตการพึ่งพา Maven จุดประสงค์และรายละเอียดวิธีการดำเนินงาน
หากคุณต้องการเจาะลึกลงไปใน Maven เอกสารเป็นจุดเริ่มต้นที่ดี