pom.xml และ settings.xml
pom.xml และ sett.xml สามารถกล่าวได้ว่าเป็นไฟล์การกำหนดค่าที่สำคัญที่สุดสองไฟล์ใน Maven ซึ่งกำหนดฟังก์ชั่นหลักของ Maven แม้ว่าบทความก่อนหน้านี้กล่าวถึงเนื้อหาใน pom.xml และ settings.xml ในชิ้นส่วน แต่ก็ถูกกล่าวถึงสั้น ๆ และการเรียนรู้และการวิจัยไม่ได้มีรายละเอียด จุดประสงค์ของบทความนี้คือการศึกษาไฟล์การกำหนดค่าที่สำคัญทั้งสองนี้โดยละเอียด ไฟล์การกำหนดค่าทั้งสองนี้สามารถนำไปสู่หัวข้อ Maven จำนวนมาก
Maven ประสานงาน
ก่อนอื่นมาพูดถึงสาเหตุที่เราต้องใช้พิกัด Maven
Maven World มีส่วนประกอบจำนวนมากนั่นคือขวดบางส่วนสงครามและไฟล์อื่น ๆ ที่มักใช้ ก่อนที่ Maven จะแนะนำแนวคิดของพิกัดสำหรับส่วนประกอบเหล่านี้เราไม่สามารถใช้วิธีการใด ๆ เพื่อระบุส่วนประกอบเหล่านี้ทั้งหมด ดังนั้นหากคุณต้องการใช้การพึ่งพาฤดูใบไม้ผลิให้ไปที่เว็บไซต์อย่างเป็นทางการของฤดูใบไม้ผลิเพื่อค้นหา หากคุณต้องการใช้การพึ่งพา log4j ให้ไปที่เว็บไซต์อย่างเป็นทางการของ Apache เพื่อค้นหา เนื่องจากรูปแบบที่แตกต่างกันของแต่ละเว็บไซต์ใช้เวลาส่วนใหญ่ในการค้นหาและเรียกดูหน้าเว็บ หากปราศจากบรรทัดฐานและกฎที่เป็นเอกภาพการทำงานไม่สามารถเป็นไปโดยอัตโนมัติและควรใช้แรงงานซ้ำ ๆ กับเครื่องจักร
Maven กำหนดชุดของกฎ: องค์ประกอบใด ๆ ในโลกสามารถระบุได้โดยพิกัด Maven องค์ประกอบพิกัด Maven รวมถึง GroupID, artifactid, เวอร์ชัน, บรรจุภัณฑ์และตัวจําแนก ตอนนี้ตราบใดที่เราจัดให้มีพิกัดองค์ประกอบที่ถูกต้อง Maven สามารถค้นหาองค์ประกอบที่เกี่ยวข้องได้ สำหรับสถานที่ที่จะดาวน์โหลด Maven เองมีที่อยู่ในตัวของคลังสินค้ากลาง "http://repo1.maven.org/maven2" คลังสินค้ากลางมีส่วนประกอบของโครงการโอเพ่นซอร์สยอดนิยมส่วนใหญ่ในโลก Mavne จะดาวน์โหลดเมื่อจำเป็น แน่นอนคุณสามารถกำหนดค่าที่อยู่คลังสินค้ากลางของคุณเองและดาวน์โหลดส่วนประกอบในคลังสินค้ากลางของคุณเอง
ตัวอย่างเช่นบริบทของฤดูใบไม้ผลิ:
<การพึ่งพา> <roupId> org.springframework </groupId> <ratifactid> Spring-Context </artifactid> <version> 4.2.6.release </version> </การพึ่งพาอาศัยกัน
ดูองค์ประกอบของผู้ใต้บังคับบัญชา:
นี่เป็นแนวคิดของพิกัด Maven การทำความเข้าใจพิกัด Maven เป็นขั้นตอนที่สำคัญมากในการทำความเข้าใจ Maven
การพึ่งพาสกรรมกริยา
การพึ่งพาสกรรมกริยาคืออะไร? ใช้สปริงเป็นตัวอย่าง เมื่อใช้ฤดูใบไม้ผลิคุณจะพึ่งพาไลบรารีคลาสโอเพ่นซอร์สอื่น ๆ มีสองวิธีในการทำเช่นนี้:
1. ดาวน์โหลดแพ็คเกจ. zip ขนาดใหญ่ที่มีขวดฤดูใบไม้ผลิทั้งหมด แต่การทำเช่นนั้นมักจะแนะนำการพึ่งพาที่ไม่จำเป็นจำนวนมาก
2. ดาวน์โหลดแพ็คเกจ. ZIP ที่เกี่ยวข้องกับสปริงเท่านั้นไม่รวมถึงการพึ่งพา เมื่อใช้งานให้เพิ่มการพึ่งพาอื่น ๆ ตามข้อมูลข้อผิดพลาด
เห็นได้ชัดว่าทั้งสองวิธีมีปัญหามากและกลไกการพึ่งพาสกรรมกริยาของ Maven ช่วยแก้ปัญหานี้ได้ดี เปิด pom.xml ของ Spring-Core-4.1.0.0.0.0 และฉันสกัดกั้นส่วนสำคัญ:
<การพึ่งพา> <การพึ่งพา> <roupId> Commons-Codec </groupId> <ratifactId> Commons-Codec </artifactid> <sersion> 1.9 </เวอร์ชัน> <pope> คอมไพล์ </scope> <plorial> True </onftiveal> <Sersion> 1.1.3 </Spover> <Scope> Compile </cope> </dependency> ... </dependencies>
ตัวอย่างเช่นโครงการ A ขึ้นอยู่กับสปริงคอร์สปริงคอร์ขึ้นอยู่กับคอมมอนส์-โด็กและการบันทึกคอมมอนส์ดังนั้นคอมมอนส์-โด็กและคอมมอนส์-บันทึกการพึ่งพาสกรรมกริยาของโครงการ A. ด้วยกลไกการพึ่งพาสกรรมกริยาเมื่อใช้สปริงคอร์คุณไม่ต้องพิจารณาสิ่งที่มันขึ้นอยู่กับและคุณไม่ต้องกังวล Maven จะแยกวิเคราะห์ POM การพึ่งพาโดยตรงแต่ละครั้งและแนะนำการพึ่งพาทางอ้อมที่จำเป็นในโครงการปัจจุบันในรูปแบบของการพึ่งพาสกรรมกริยา
ด้วยกลไกการพึ่งพาสกรรมกริยาในอีกด้านหนึ่งมันจะช่วยลดความซับซ้อนและอำนวยความสะดวกในการประกาศการพึ่งพา ในอีกทางหนึ่งในกรณีส่วนใหญ่เราเพียงแค่ต้องใส่ใจเกี่ยวกับสิ่งที่การพึ่งพาโดยตรงของโครงการคือและไม่จำเป็นต้องพิจารณาว่าการพึ่งพาสกรรมกริยาจะถูกนำเสนอโดยการพึ่งพาโดยตรงเหล่านี้ อย่างไรก็ตามบางครั้งการพึ่งพาสกรรมกริยาจะมีปัญหาบางอย่าง ในเวลานี้เราจำเป็นต้องล้างเส้นทางที่มีการพึ่งพาสกรรมกริยา สิ่งนี้เรียกว่าการไกล่เกลี่ยการพึ่งพา มีสองหลักการหลักของการไกล่เกลี่ยการพึ่งพา:
1. a-> b-> c-> x (1.0), a-> d-> x (2.0) ในเวลานี้มีสองรุ่นของ x บนเส้นทางการพึ่งพาสองเส้นทาง ในเวลานี้เส้นทางที่ใกล้เคียงที่สุดเป็นที่ต้องการดังนั้น X (2.0) จะถูกแยกวิเคราะห์และใช้งาน
2. ความยาวการพึ่งพาของ a-> b-> y (1.0), a-> c-> y (2.0), y (1.0) และ y (2.0) เหมือนกัน เริ่มต้นจาก maven2.0.9 คำสั่งแรกตามลำดับความสำคัญนั่นคือการพึ่งพาที่มีลำดับสูงสุดเป็นที่ต้องการ
ไม่รวมการพึ่งพา
การพึ่งพาสกรรมกริยาจะแนะนำการพึ่งพาจำนวนมากในโครงการซึ่งทำให้การจัดการการพึ่งพาโครงการง่ายขึ้นอย่างมาก แต่บางครั้งคุณลักษณะนี้ก็อาจทำให้เกิดปัญหาได้ ตัวอย่างเช่นมีสถานการณ์:
โครงการปัจจุบันขึ้นอยู่กับ A. A ขึ้นอยู่กับรุ่นสแน็ปช็อตของไลบรารีคลาสอื่นด้วยเหตุผลบางอย่าง จากนั้นภาพรวมนี้จะกลายเป็นการพึ่งพาสกรรมกริยาของโครงการปัจจุบัน ประการที่สองความไม่แน่นอนของสแน็ปช็อตจะส่งผลโดยตรงต่อโครงการปัจจุบัน ในเวลานี้สแน็ปช็อตจะต้องได้รับการยกเว้นและรุ่นรีลีสที่เป็นทางการของไลบรารีคลาสจะถูกประกาศในโครงการปัจจุบัน
มันง่ายมากที่จะยกเว้นการพึ่งพาให้มาดูวิธีการเขียน:
<Ependency> <sderctId> com.alibaba.rocketmq </groupId> <ratifactId> rocketMQ-Client </artifactid> <Sersion> 3.2.7 </Sersion> <EXCLUSIONS> <EXCLUSION> <SALRICISION>
ที่นี่ฉันแนะนำการพึ่งพา RocketMQ แต่ฉันไม่ต้องการพึ่งพา Apache-lang ใน RocketMQ แต่ต้องการแนะนำการพึ่งพาด้วยตัวเองดังนั้นฉันจึงแยก Apache-Lang ออก
ควรสังเกตที่นี่ว่าเมื่อประกาศการยกเว้นจำเป็นต้องใช้เฉพาะกลุ่มและ artifactId และไม่จำเป็นต้องใช้องค์ประกอบเวอร์ชัน นี่เป็นเพราะเฉพาะกลุ่มและ artifactId ที่จำเป็นเพื่อค้นหาการพึ่งพาในกราฟการพึ่งพา กล่าวอีกนัยหนึ่งในการพึ่งพาการแยกวิเคราะห์ของ Maven มันเป็นไปไม่ได้ที่จะมีการพึ่งพาสองครั้งที่มี groupID และ artifactId เดียวกัน แต่รุ่นที่แตกต่างกัน
settings.xml
settings.xml คือการกำหนดค่าพื้นฐานของ Maven มีองค์ประกอบหลายอย่างดังนั้นลองมาดูกันทีละรายการ
1. พร็อกซี
พร็อกซีหมายถึงพร็อกซีของ Maven มาดูวิธีการเขียน:
<proxies> <proxy> <id> ตัวเลือก </id> <part> True </active> <protocol> http </protocol> <sername> proxyuser </username> <password> proxypass </password> <most> proxy.host.net <Nonproxyhosts> local.net | some.host.com </nonproxyhosts> </proxy> </proxies>
พร็อกซีเป็นสิ่งจำเป็นเพราะหลายครั้งที่ บริษัท ของคุณต้องการให้คุณเข้าถึงอินเทอร์เน็ตโดยใช้พร็อกซีที่ผ่านการรับรองความปลอดภัยตามข้อควรพิจารณาด้านความปลอดภัย ในกรณีนี้คุณจะต้องกำหนดค่าพร็อกซี HTTP สำหรับ Maven เพื่อให้สามารถเข้าถึงที่เก็บภายนอกตามปกติเพื่อดาวน์โหลดทรัพยากรที่จำเป็น สามารถกำหนดค่าองค์ประกอบพร็อกซีหลายอย่างภายใต้พร็อกซี หากมีการประกาศองค์ประกอบพร็อกซีหลายรายการการเปิดใช้งานพร็อกซีครั้งแรกจะมีผลตามค่าเริ่มต้น Active เป็นจริงในการเปิดใช้งานพร็อกซีโปรโตคอลแสดงถึงโปรโตคอลพร็อกซีที่ใช้แน่นอนสิ่งที่สำคัญที่สุดคือการระบุชื่อโฮสต์ที่ถูกต้อง (โฮสต์) และพอร์ต (พอร์ต) หากพร็อกซีเซิร์ฟเวอร์ต้องการการรับรองความถูกต้องให้กำหนดค่าชื่อผู้ใช้และรหัสผ่าน องค์ประกอบ nonproxyhost ระบุชื่อโฮสต์ที่ไม่ต้องการพร็อกซี คุณสามารถใช้ "|" ในการแยกชื่อโฮสต์หลายชื่อและสนับสนุน Wildcard "*"
2. ที่เก็บ
ที่เก็บแสดงถึงคลังสินค้ากลางของ Maven เพราะแม้ว่าส่วนประกอบในคลังสินค้าระยะไกลเริ่มต้นมีขนาดใหญ่มาก แต่ก็มีบางครั้งที่พวกเขาไม่ตอบสนองความต้องการของเราและคลังสินค้ากลางอื่น ๆ จะถูกนำมาใช้ มาดูวิธีการเขียน:
<repository> <id> สาธารณะ </id> <name> Nexus ส่วนตัวท้องถิ่น </name> <url> http://192.168.1.6:8081/nexus/content/groups/public </url> </snapshots> </repository>
สามารถประกาศพื้นที่เก็บข้อมูลหลายแห่งได้ ID ต้องไม่ซ้ำกัน ให้ความสนใจเป็นพิเศษว่า ID ที่ใช้โดยที่เก็บกลางที่ Maven มาพร้อมกับเป็นศูนย์กลาง หากการประกาศพื้นที่เก็บข้อมูลอื่น ๆ ใช้ ID นี้การกำหนดค่าของที่เก็บกลางจะถูกเขียนทับ การเผยแพร่และสแนปชอตมีความสำคัญมากกว่า อดีตหมายถึงการเปิดการสนับสนุนการดาวน์โหลดเวอร์ชันรีลีสสำหรับที่เก็บและหลังหมายถึงการปิดการดาวน์โหลดเวอร์ชันสแน็ปช็อตสำหรับที่เก็บข้อมูล ด้วยวิธีนี้ Maven จะไปที่ที่เก็บเพื่อดาวน์โหลดเวอร์ชันรีลีสของที่เก็บโดยไม่ต้องดาวน์โหลดเวอร์ชันสแน็ปช็อตของที่เก็บ
3. เซิร์ฟเวอร์
คลังสินค้าระยะไกลส่วนใหญ่สามารถเข้าถึงได้โดยไม่ต้องมีการตรวจสอบ แต่บางครั้งพวกเขาได้รับการพิจารณาในปัจจัยความปลอดภัยและจำเป็นต้องให้ข้อมูลการตรวจสอบสิทธิ์เพื่อเข้าถึงคลังสินค้าระยะไกลบางแห่ง สำหรับการพิจารณาความปลอดภัยข้อมูลการตรวจสอบโดยทั่วไปจะอยู่ในการตั้งค่าเท่านั้น xml และเซิร์ฟเวอร์เป็นองค์ประกอบการตรวจสอบสิทธิ์ ดูการกำหนดค่า:
<server> <id> nexus-releases </id> <ผู้ใช้> การปรับใช้ </sername> <password> การปรับใช้ </password> </server>
กุญแจสำคัญนี่คือ ID ID นี้จะต้องเหมือนกับ ID ขององค์ประกอบ repositiry ที่ต้องได้รับการรับรองความถูกต้อง กล่าวอีกนัยหนึ่ง ID อย่างเป็นทางการเชื่อมโยงข้อมูลการตรวจสอบและการกำหนดค่าที่เก็บ
4. กระจก
หากคลังสินค้า X สามารถจัดหาเนื้อหาทั้งหมดที่เก็บไว้ในคลังสินค้า y แล้วคลังสินค้า X สามารถพิจารณาได้ว่าเป็นกระจกของคลังสินค้า Y กล่าวอีกนัยหนึ่งองค์ประกอบใด ๆ ที่สามารถรับได้จาก y สามารถรับได้จาก X ตัวอย่างเช่น "http://maven.net.cn/content/groups/public "http://repo1.maven.org/maven2/" ในประเทศจีน เนื่องจากปัจจัยที่ตั้งทางภูมิศาสตร์กระจกจึงสามารถให้บริการได้เร็วกว่าคลังสินค้ากลางซึ่งเป็นสาเหตุที่ใช้กระจก
ดูการกำหนดค่าของ Mirror:
<มิเรอร์> <id> nexus </id> <name> ที่เก็บ Nexus ภายใน </name> <url> http://192.168.1.6:8081/nexus/content/groups/public </url>
ในตัวอย่างนี้ Mirrorf คือ *ซึ่งระบุว่าการกำหนดค่าเป็นกระจกสำหรับที่เก็บกลางทั้งหมดและคำขอใด ๆ สำหรับที่เก็บกลางจะถูกถ่ายโอนไปยังกระจก ID องค์ประกอบอีกสามรายการชื่อและ URL ไม่แตกต่างจากการกำหนดค่าคลังสินค้าทั่วไปซึ่งแสดงถึงตัวระบุชื่อและที่อยู่ของคลังสินค้ามิเรอร์ ในทำนองเดียวกันหากภาพต้องการการตรวจสอบสิทธิ์การตรวจสอบที่เก็บข้อมูลสามารถกำหนดค่าได้ตาม ID
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!