คลังสินค้า Maven คืออะไร
เมื่อเราไม่ได้ใช้ Maven ในอดีตเราเคยสร้างโครงการด้วย ANT เรามักจะเห็นไดเรกทอรีย่อยที่เรียกว่า /lib ซึ่งเก็บไฟล์ jar พึ่งพาของบุคคลที่สามต่าง ๆ เช่น log4j.jar, junit.jar ฯลฯ
ทุกครั้งที่คุณสร้างโครงการคุณจะต้องสร้างไดเรกทอรี A /LIB ดังกล่าวจากนั้นคัดลอกไฟล์ JAR คู่หนึ่งซึ่งเป็นการทำซ้ำที่ชัดเจน การทำซ้ำเป็นจุดเริ่มต้นของฝันร้ายเสมอ หลายโครงการไม่ได้แชร์ไฟล์ JAR เดียวกันซึ่งไม่เพียง แต่ทำให้เกิดทรัพยากรของดิสก์ แต่ยังทำให้การจัดการความสอดคล้องของเวอร์ชันเป็นเรื่องยาก
นอกจากนี้หากคุณใช้เครื่องมือการจัดการเวอร์ชันเช่น SVN (คุณไม่ได้ใช้เครื่องมือการจัดการเวอร์ชันหรือไม่ลอง SVN ตอนนี้มันสามารถช่วยคุณแก้ปวดหัวได้มากมาย) คุณต้องส่งไฟล์ JAR จำนวนมากไปยังไลบรารีรหัส แต่เครื่องมือการจัดการเวอร์ชันไม่ได้ยอดเยี่ยมในการจัดการไฟล์ไบนารี
ที่เก็บ Maven เป็นที่วางไฟล์ jar ทั้งหมด (สงคราม, zip, pom, ฯลฯ ) โครงการ Maven ทั้งหมดสามารถรับขวดการพึ่งพาที่ต้องการจากที่เก็บ Maven เดียวกันซึ่งช่วยประหยัดทรัพยากรดิสก์ นอกจากนี้เนื่องจากขวดทั้งหมดในที่เก็บ Maven มีพิกัดของตัวเองซึ่งบอก Maven ID กลุ่ม, ID ส่วนประกอบ, เวอร์ชัน, วิธีการบรรจุภัณฑ์ ฯลฯ โครงการ Maven สามารถดำเนินการจัดการเวอร์ชันการพึ่งพาได้อย่างง่ายดาย คุณไม่จำเป็นต้องส่งไฟล์ JAR ไปยังที่เก็บ SCM คุณสามารถสร้างที่เก็บ Maven ระดับองค์กรเพื่อให้สมาชิกทุกคนใช้
ในระยะสั้นที่เก็บ Maven ช่วยให้เราจัดการสิ่งประดิษฐ์ (ส่วนใหญ่คือขวด)
ใน Maven เอาต์พุตของการพึ่งพาปลั๊กอินหรือการก่อสร้างโครงการสามารถเรียกได้ว่าเป็นส่วนประกอบ
Maven เก็บส่วนประกอบที่ใช้ร่วมกันทั้งหมดของโครงการทั้งหมดในสถานที่รวมกัน สถานที่รวมนี้เรียกว่าคลังสินค้า (คลังสินค้าเป็นที่เก็บการพึ่งพาและปลั๊กอิน)
ส่วนประกอบใด ๆ มีพิกัดที่ไม่ซ้ำกัน Maven กำหนดเส้นทางการจัดเก็บที่ไม่ซ้ำกันของส่วนประกอบในคลังสินค้าตามพิกัดนี้
ตีความเส้นทางการจัดเก็บของ Maven ในที่เก็บ:
1. เตรียมเส้นทางตาม GroupID แปลงตัวคั่นระยะเวลาเป็นตัวคั่นพา ธ นั่นคือแปลง " ถึง "/" ; ตัวอย่าง: org.testng ---> org/testng
2. เตรียมเส้นทางตาม artifactId และเชื่อมต่อ artifactid กับด้านหลัง: org/testng/testng
3. ใช้เวอร์ชันเพื่อเตรียมเส้นทางและเชื่อมต่อเวอร์ชันกับด้านหลัง: org/testng/testng/5.8
4. เชื่อมต่อ artifactid กับเวอร์ชันด้วยตัวคั่นด้วยยัติภังค์ด้านหลัง: org/testng/testNG/5.8/tesng-5.8
5. การตัดสินว่าส่วนประกอบมีตัวจําแนกให้เพิ่มยัติภังค์ตัวคั่นหลังจากรายการ 4 และเพิ่มตัวจําแนก, org/testng/testng/5.8/tesng-5.8-jdk5
6. ตรวจสอบส่วนขยายของส่วนประกอบ หากส่วนขยายมีอยู่ให้เพิ่มตัวคั่นระยะเวลาและส่วนขยาย ส่วนขยายจะถูกกำหนดโดยการบรรจุ, org/testng/testng/5.8/tesng-5.8-jdk5.jar
ณ จุดนี้เราเข้าใจรายละเอียดของการจัดเก็บส่วนประกอบของ Maven
การจำแนกคลังสินค้า Maven:
คลังสินค้าของ Maven มีเพียงสองประเภทเท่านั้น: 1. คลังสินค้าท้องถิ่น 2. คลังสินค้าระยะไกลซึ่งแบ่งออกเป็นสามประเภทในคลังสินค้าระยะไกล: 2.1 คลังสินค้ากลาง 2.2 เซิร์ฟเวอร์ส่วนตัว 2.3 คลังสินค้าสาธารณะอื่น ๆ
1. คลังสินค้าในท้องถิ่นตามชื่อหมายถึงเป็นที่ที่ Maven เก็บส่วนประกอบในพื้นที่
หมายเหตุ: พื้นที่เก็บข้อมูลท้องถิ่นของ Maven จะไม่ถูกสร้างขึ้นหลังจากติดตั้ง Maven มันถูกสร้างขึ้นเฉพาะเมื่อคำสั่ง maven ถูกดำเนินการเป็นครั้งแรก
ตำแหน่งเริ่มต้นของพื้นที่เก็บข้อมูลในท้องถิ่นของ Maven: ไม่ว่าจะเป็น Windows หรือ Linux มีไดเรกทอรี. M2/ ที่เก็บ/ ที่เก็บในไดเรกทอรีของผู้ใช้ นี่คือตำแหน่งเริ่มต้นของที่เก็บ Maven
วิธีเปลี่ยนตำแหน่งของที่เก็บในท้องถิ่นเริ่มต้นของ Maven: ที่นี่เราต้องการแนะนำองค์ประกอบใหม่: LocalRepository ซึ่งมีอยู่ในไฟล์ Settings.xml ของ Maven
1.1 เปลี่ยนพื้นที่เก็บข้อมูลท้องถิ่นที่กำหนดค่าทั่วทั้งผู้ใช้: แรกสร้างไฟล์ settings.xml ในไดเรกทอรี /.m2/ จากนั้นตั้งค่าขององค์ประกอบ localrepository เป็นที่อยู่ที่เก็บที่ต้องการใน ~/.m2/settings.xml
<SettingS> <SocalRepository> D:/MAVEN_NEW_REPOSITORY </localRepository> </settings>
ในเวลานี้ที่อยู่พื้นที่เก็บข้อมูลท้องถิ่นของ Maven กลายเป็น d:/maven_new_repository หมายเหตุ: พื้นที่เก็บข้อมูลท้องถิ่นของ Maven ที่กำหนดค่าในเวลานี้เป็นของขอบเขตผู้ใช้
1.2 เปลี่ยนการกำหนดค่าที่เก็บข้อมูลท้องถิ่นทั่วโลก: เปลี่ยนการกำหนดค่าใน M2_HOME/CONF/SETTING.XML วิธีการเปลี่ยนการกำหนดค่าเหมือนกับด้านบนข้างต้น
หมายเหตุ: หลังจากการเปลี่ยนแปลงนี้ผู้ใช้ทั้งหมดจะได้รับผลกระทบและหากมีการอัพเกรด Maven การกำหนดค่าทั้งหมดจะถูกล้างดังนั้นคุณต้องคัดลอกและสำรองไฟล์ M2_HOME/CONF/SETTING.XML ล่วงหน้า
ดังนั้น: ภายใต้สถานการณ์ปกติการกำหนดค่าของการตั้งค่าส่วนกลาง xml ไม่แนะนำ
2. ที่เก็บระยะไกล
2.1 เมื่อพูดถึงคลังสินค้าระยะไกลเริ่มต้นด้วยคลังสินค้ากลางหลักที่สุด คลังสินค้ากลางเป็นคลังสินค้าระยะไกลเริ่มต้น เมื่อติดตั้ง Maven มันจะมาพร้อมกับการกำหนดค่าของคลังสินค้ากลาง
ในการรวมตัวของ Maven และมรดกเราได้กล่าวว่าโครงการ Maven ทั้งหมดจะได้รับมรดก Super Pom โดยเฉพาะหาก POM ที่มีการกำหนดค่าต่อไปนี้เราเรียกมันว่า Super Pom
<ที่เก็บ> <ที่เก็บ> <id> กลาง </id> <name> ที่เก็บกลาง </name> <url> http://repo.maven.apache.org/maven2 </url> <dayout> </layout>
คลังสินค้ากลางมีส่วนประกอบ Java โอเพนซอร์สที่ได้รับความนิยมมากที่สุดรวมถึงซอร์สโค้ดข้อมูลผู้แต่ง SCM ข้อมูลข้อมูลใบอนุญาต ฯลฯ โดยทั่วไปการพูดการพึ่งพาโครงการ Java อย่างง่ายสามารถดาวน์โหลดได้ที่นี่
2.2 เซิร์ฟเวอร์ส่วนตัว
เซิร์ฟเวอร์ส่วนตัวเป็นคลังสินค้าระยะไกลพิเศษ มันเป็นบริการคลังสินค้าที่ตั้งอยู่ใน LAN เซิร์ฟเวอร์ส่วนตัวเป็นตัวแทนของคลังสินค้าระยะไกลใน WAN สำหรับผู้ใช้ Maven ใน LAN เมื่อ Maven ต้องการดาวน์โหลดส่วนประกอบจะร้องขอจากเซิร์ฟเวอร์ส่วนตัว หากส่วนประกอบไม่มีอยู่บนเซิร์ฟเวอร์ส่วนตัวมันจะดาวน์โหลดจากที่เก็บระยะไกลภายนอกให้แคชบนเซิร์ฟเวอร์ส่วนตัวแล้วให้บริการสำหรับคำขอดาวน์โหลดของ Maven นอกจากนี้เรายังสามารถอัปโหลดส่วนประกอบบางอย่างที่ไม่สามารถดาวน์โหลดได้จากคลังสินค้าภายนอกไปยังเซิร์ฟเวอร์ส่วนตัว
คุณสมบัติของ Maven Private Server:
1. บันทึกแบนด์วิดท์เครือข่ายภายนอกของคุณเอง: ลดการใช้แบนด์วิดท์ของเครือข่ายภายนอกที่เกิดจากคำขอซ้ำ ๆ
2. เร่งส่วนประกอบ Maven: หากโครงการได้รับการกำหนดค่าด้วยคลังสินค้าระยะไกลภายนอกจำนวนมากความเร็วในการก่อสร้างจะลดลงอย่างมาก
3. การปรับใช้ส่วนประกอบของบุคคลที่สาม: เมื่อส่วนประกอบบางอย่างไม่สามารถรับได้จากคลังสินค้าภายนอกเราสามารถปรับใช้ส่วนประกอบเหล่านี้กับคลังสินค้าภายใน (เซิร์ฟเวอร์ส่วนตัว) เพื่อใช้งานโดยโครงการ Maven ภายใน
4. ปรับปรุงความเสถียรและเพิ่มการควบคุม: เมื่ออินเทอร์เน็ตไม่เสถียรการก่อสร้าง Maven ก็จะไม่เสถียรเช่นกัน ซอฟต์แวร์เซิร์ฟเวอร์ส่วนตัวบางตัวยังมีฟังก์ชั่นอื่น ๆ
5. ลดภาระของคลังสินค้ากลาง: จำนวนคำขอสำหรับคลังสินค้ากลาง Maven มีขนาดใหญ่มากและการกำหนดค่าเซิร์ฟเวอร์ส่วนตัวสามารถลดแรงกดดันของคลังสินค้ากลางได้อย่างมาก
เซิร์ฟเวอร์ส่วนตัว Maven Maven ปัจจุบัน:
1.Apache's Archiva
2. jfrog's Artifactory
3. Nexus ของ Sonatype
3. การกำหนดค่าคลังสินค้าระยะไกล
การกำหนดค่าที่เก็บระยะไกลจะแนะนำองค์ประกอบการกำหนดค่าใหม่: <ที่เก็บ> <ที่เก็บ>
ภายใต้องค์ประกอบ <ที่เก็บ> คุณสามารถใช้องค์ประกอบของเด็ก <ที่เก็บ> เพื่อประกาศที่เก็บระยะไกลอย่างน้อยหนึ่งรายการ
ตัวอย่าง:
<repository> <id> jboss </id> <name> jboss repository </name> <url> http://repository.jboss.com/maven2/ </url> <leasees> <updatePolicy> รายวัน </updatePolicy> <! <SocksUmpolicy> เตือน </shecksUmpolicy> <!-ล้มเหลว, ละเว้น-> </releases> <Snapshots> <enabled> false </enabled> </snapshots> <dayout> ค่าเริ่มต้น </layout> </repository>
<updatepolicy> องค์ประกอบ: แสดงถึงความถี่ในการอัปเดตค่าคือ: ไม่เคย, ช่วงเวลา, ทุกวัน, รายวันเป็นค่าเริ่มต้น
<ChecksUmpolicy> องค์ประกอบ: แสดงถึงนโยบายของ Maven เพื่อตรวจสอบและตรวจสอบไฟล์ WARN เป็นค่าเริ่มต้นสำหรับเหตุผลด้านความปลอดภัย บางครั้งเราจำเป็นต้องตรวจสอบสิทธิ์การเข้าถึงคลังสินค้าระยะไกล โดยทั่วไปข้อมูลการรับรองความถูกต้องจะถูกกำหนดค่าใน settings.xml:
<servers> <server> <id> เหมือนกันกับที่เก็บ ID ใน POM </id> <ผู้ใช้> ชื่อผู้ใช้ </username> <password> PWD </passward> </server> </servers>
หมายเหตุ: ID ที่นี่จะต้องสอดคล้องกับ ID ขององค์ประกอบที่เก็บที่ต้องได้รับการรับรองความถูกต้องใน POM
วิธีการปรับใช้โครงการที่สร้างขึ้นเพื่อที่เก็บระยะไกล
ในการทำงานนี้ให้เสร็จสมบูรณ์คุณต้องกำหนดค่าใน POM นี่คือองค์ประกอบใหม่: <การแจกจ่ายการจัดการ>
DistributeManagement ประกอบด้วยองค์ประกอบเด็ก 2 องค์ประกอบ: ที่เก็บและสแนปช็อต อดีตแสดงถึงที่เก็บสำหรับการเผยแพร่ส่วนประกอบเวอร์ชันและหลังแสดงถึงที่เก็บสำหรับเวอร์ชันสแน็ปช็อต
องค์ประกอบทั้งสองจำเป็นต้องกำหนดค่า ID (ตัวระบุที่ไม่ซ้ำกันของที่เก็บระยะไกล) ชื่อ URL (แสดงที่อยู่ของที่เก็บ)
การปรับใช้ส่วนประกอบลงในคลังสินค้าระยะไกลต้องใช้การตรวจสอบสิทธิ์ การกำหนดค่าเหมือนกับด้านบน
รันหลังจากการกำหนดค่าถูกต้อง: MVN Clean Deploy
ดูสแน็ปช็อตอย่างถูกต้อง
ก่อนหน้านี้เมื่อกำหนดค่า POM เราระมัดระวังมากเกี่ยวกับการกำหนดค่าสแนปชอตหรือไม่ค่อยใช้เวอร์ชันสแน็ปช็อต เหตุผลก็คือมันยังคงไม่เสถียรมากและง่ายมากที่จะทำให้เกิดข้อผิดพลาดที่ไม่รู้จักไปยังระบบของเราทำให้เราค้นหาได้ยาก อันที่จริงเวอร์ชันสแน็ปช็อตไม่ได้ไร้ประโยชน์ จุดประสงค์ที่ใหญ่ที่สุดของสแน็ปช็อตคือการใช้ในกระบวนการพัฒนาโดยเฉพาะอย่างยิ่งเมื่อมีการพึ่งพาโมดูล ตัวอย่างเช่น A และ B ได้รับการพัฒนาพร้อมกัน A ขึ้นอยู่กับ B. ในระหว่างกระบวนการพัฒนา A และ B เป็นการพัฒนาแบบบูรณาการอย่างต่อเนื่องปรับเปลี่ยนไฟล์ POM และโครงการสร้างอย่างต่อเนื่อง ในเวลานี้การซิงโครไนซ์เวอร์ชันกลายเป็นปัญหาใหญ่ สิ่งนี้สามารถทำได้โดยใช้สแน็ปช็อต
ในความเป็นจริงในระหว่างการเปิดตัวรุ่น Snapshot Maven จะทำเครื่องหมายส่วนประกอบโดยอัตโนมัติด้วยการประทับเวลาปัจจุบัน ด้วยการประทับเวลานี้เราสามารถค้นหาเวอร์ชันสแน็ปช็อตล่าสุดได้ตลอดเวลาซึ่งจะแก้ปัญหาการพัฒนาความร่วมมือที่เพิ่งกล่าวถึง
สำหรับวิธีการตรวจสอบการอัปเดตของ B ฉันเพิ่งพูดเมื่อพูดถึงการกำหนดค่าว่ามีองค์ประกอบในการกำหนดค่าสแน็ปช็อตที่สามารถควบคุมความถี่ในการตรวจสอบการอัปเดต -------- UpdatePolicy
นอกจากนี้เรายังสามารถใช้บรรทัดคำสั่งเพื่อเพิ่มพารามิเตอร์เพื่อบังคับให้ Maven ตรวจสอบการอัปเดต: mvn clean install-U
Maven แยกส่วนประกอบจากคลังสินค้าได้อย่างไร? ---- กลไกของ Maven สำหรับการแยกวิเคราะห์การพึ่งพาจากที่เก็บ
1. เมื่อขอบเขตของการพึ่งพาเป็นระบบ Maven จะแก้ไขส่วนประกอบโดยตรงจากระบบไฟล์ท้องถิ่น
2. หลังจากคำนวณเส้นทางคลังสินค้าตามพิกัดการพึ่งพาให้พยายามค้นหาส่วนประกอบโดยตรงจากคลังสินค้าท้องถิ่น หากพบองค์ประกอบที่เกี่ยวข้องความละเอียดจะสำเร็จ
3. ในกรณีที่ไม่มีส่วนประกอบที่สอดคล้องกันในที่เก็บท้องถิ่นหากเวอร์ชันที่ขึ้นอยู่กับคือส่วนประกอบรุ่นรุ่นที่แสดงจะวนซ้ำผ่านที่เก็บระยะไกลทั้งหมดและดาวน์โหลดหลังจากค้นพบ
4. หากรุ่นที่ขึ้นอยู่กับการเปิดตัวหรือล่าสุดข้อมูลเมตาของที่เก็บระยะไกลทั้งหมดจะอ่านตามนโยบายการอัปเดตรวมเมตาดาต้าที่สอดคล้องกันของที่เก็บในท้องถิ่นคำนวณค่าที่แท้จริงของการเปิดตัวหรือล่าสุดจากนั้นตรวจสอบที่เก็บท้องถิ่นตามค่าที่แท้จริงนี้
5. หากรุ่นที่ขึ้นอยู่กับสแนปชอตข้อมูลเมตาของที่เก็บระยะไกลทั้งหมดจะอ่านตามนโยบายการอัปเดตรวมกับข้อมูลเมตาที่สอดคล้องกันของที่เก็บข้อมูลท้องถิ่นและรับค่าของเวอร์ชันสแน็ปช็อตล่าสุดแล้วตรวจสอบที่เก็บท้องถิ่นตามมูลค่าหรือดาวน์โหลดจากที่เก็บระยะไกล
6. หากเวอร์ชัน Artifact ที่แยกวิเคราะห์ล่าสุดเป็นภาพรวมของรูปแบบการประทับเวลาให้คัดลอกไฟล์ในรูปแบบการประทับเวลาเป็นรูปแบบที่ไม่ใช่ Timetamp และใช้สิ่งประดิษฐ์ในรูปแบบที่ไม่ใช่ Timetamp นี้
หมายเหตุ: ตรวจสอบให้แน่ใจว่าได้จดจำ <release> <enabled> & <snapshot> <enabled> สิ่งเดียวกันนี้เป็นจริงสำหรับสแน็ปช็อต
ไม่แนะนำให้เปิดตัวล่าสุดเมื่อประกาศ POM ล่าสุด & รีลีสในการกำหนดค่าปลั๊กอินไม่ได้รับการสนับสนุนใน Maven3 อีกต่อไป หากไม่ได้ตั้งค่าเวอร์ชันปลั๊กอินเวอร์ชันสุดท้ายจะเหมือนกับรีลีส
Maven จะแยกวิเคราะห์การสร้างล่าสุดเท่านั้น
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น