บางทีฉันอาจไม่ได้มีความสามารถและเมื่อฉันได้พบกับ Maven ครั้งแรกฉันก็สับสนกับบทเรียนที่ไม่รู้จักต่างๆ ในการใช้งานในภายหลังของฉันฉันพบว่าฟังก์ชั่นส่วนใหญ่ของ Maven นั้นไม่ยากอย่างที่ฉันจินตนาการไว้
บทความนี้มีไว้สำหรับผู้เริ่มต้นของ Maven หวังว่าจะให้มันเข้าใจ Maven โดยเร็วที่สุดและเพลิดเพลินไปกับชุดของผลประโยชน์ที่นำมา
[คำถามง่ายๆ]
ก่อนที่จะให้คำอธิบายถามคำถามง่ายๆ
หากคุณกำลังพัฒนาโครงการ Java สองโครงการภายใต้ Eclipse และเรียกพวกเขาว่า A และ B ฟังก์ชั่นบางอย่างในโครงการ A ขึ้นอยู่กับคลาสบางประเภทในโครงการ B วิธีการรักษาการพึ่งพานี้ได้อย่างไร?
ฉันทำสิ่งนี้ก่อนที่จะใช้ Maven, Project B Project B เป็นขวดและนำเข้าไฟล์ JAR ของ B ภายใต้ห้องสมุดของ Project A.
สิ่งนี้มีข้อเสียที่ชัดเจน:
1. หากพบข้อผิดพลาดใน B ในระหว่างกระบวนการพัฒนา B จะต้องได้รับการบรรจุใหม่และรวบรวมใหม่สำหรับโครงการ A.
2. เมื่อร่วมมือกันในการพัฒนาโครงการ A เพื่อให้แน่ใจว่าสามารถทำงานได้ตามปกติไม่ว่าจะเลือกแพ็คเกจ B ลงใน A หรือเลือกที่จะเผยแพร่ B เช่น B และแจ้งให้ผู้พัฒนาทราบถึงวิธีการใช้งาน เห็นได้ชัดว่าทั้งสองวิธีไม่ดีมาก อดีตอาจทำให้เกิดการเสียทรัพยากร (ตัวอย่างเช่นนักพัฒนาอาจพัฒนาโครงการอื่น ๆ ที่พึ่งพา B ซึ่งถูกเก็บไว้ในพื้นที่) ในขณะที่หลังจะนำความเสี่ยงมาสู่การดำเนินงานปกติของโครงการ (หากงานถูกส่งมอบให้กับงานด้วยตนเอง
ดังนั้นการควบคุมการพึ่งพาระหว่างโครงการด้วยวิธีนี้ด้วยตนเองจึงเป็นวิธี 'ไม่ดี'
[บทนำสู่ Maven]
ตามความเห็นของผู้เขียนฟังก์ชั่นหลักของ Maven คือการอธิบายการพึ่งพาระหว่างโครงการอย่างสมเหตุสมผล
โครงการ Maven ทั้งหมดมีไฟล์ชื่อ pom.xml ซึ่งบันทึก <GroupId> <ratifactId> <version> และฟิลด์อื่น ๆ ของตัวเอง ฟิลด์เหล่านี้เต็มไปด้วยเมื่อสร้างโครงการ Maven และ Maven จะค้นหาโครงการตามพวกเขา
แท็กคีย์อีกประการหนึ่งใน POM คือ <การพึ่งพา> ซึ่งสามารถมีแท็ก <Dermentency> หลายแท็กและภายใต้ <Deperency> เป็นฟิลด์การพึ่งพาเช่น <RoupID> <ARTIFACTID> <Sersion> แนะนำข้างต้นซึ่งกำหนดเวอร์ชันโครงการที่ไม่ซ้ำกัน
pom.xml ทั่วไป [จากโครงการ luajava]:
<Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http:/MANCMMMMMMMMMMMMMMMMMMMMMMMMMMBM http://maven.apache.org/xsd/maven-4.0.0.xsd "> <moderversion> 4.0.0 </modelversion> <modyversion> luajav </nameTifaring> <url> http://maven.apache.org </url> <properties> <project.build.sourceencoding> UTF-8 </project.build.sourceencoding> </properties> <uffer> <ArtIfactId> maven-compiler-plugin </artifactid> <sersion> 2.0.2 </เวอร์ชัน> <การกำหนดค่า> <source> 1.7 </source> <target> 1.7 </เป้าหมาย> </การกำหนดค่า> </plugin> </plugins> <cersion> 3.8.1 </version> <cope> ทดสอบ </cope> </predency> </project>
[Maven Library]
การใช้โครงการ A และ B ในขณะนี้เป็นตัวอย่างเขียน <การพึ่งพา> ในไฟล์ POM ของโครงการ A และ Maven จะพบโครงการ B ในพื้นที่ทำงานและสร้างการพึ่งพา ในเวลานี้ Project A สามารถเข้าถึงทรัพยากรคลาสโดยตรงในโครงการ B และจุดพักที่ตั้งไว้ในโครงการ B จะยังคงได้รับผลกระทบในระหว่างการดีบักของ A.
นอกเหนือจากสมาคมการพึ่งพาพื้นที่ทำงานแล้ว Maven ยังสามารถเชื่อมโยงโครงการในภาพระยะไกล โดยค่าเริ่มต้นหากไม่มีระเบียนโครงการที่สอดคล้องกันในพื้นที่ทำงาน Maven จะเชื่อมต่อกับที่เก็บกลางเพื่อค้นหา หากพบว่าจะดาวน์โหลดโครงการไปยังไลบรารีท้องถิ่น (ไลบรารีท้องถิ่นใน Windows อยู่ในไดเรกทอรี. m2 ของเอกสารผู้ใช้) และตั้งค่าการเชื่อมโยงโดยอัตโนมัติ นี่เป็นคุณสมบัติที่สะดวกมาก เมื่อเราต้องการการสนับสนุนแพ็คเกจ JAR เพิ่มเติมเราไม่จำเป็นต้องดาวน์โหลดและแนะนำด้วยตนเองอีกต่อไป เราจำเป็นต้องวางฟิลด์การพึ่งพาที่สอดคล้องกับโครงการไปยังตำแหน่งที่เหมาะสมของ POM และปล่อยให้ส่วนที่เหลือไปยัง Maven ให้เสร็จสมบูรณ์
[ตัวอย่าง]
ดังนั้นเราจะรู้ได้อย่างไรว่าฟิลด์เช่น GroupID ของโครงการที่ต้องการ?
โดยทั่วไปหากโครงการอย่างเป็นทางการสนับสนุน Maven โดยทั่วไปจะมีเขตข้อมูลการพึ่งพาในหน้าสำหรับการคัดลอก แต่ยังมีสถานการณ์ที่ Maven ได้รับการสนับสนุน แต่ไม่มีสาขาที่ขึ้นอยู่กับ คุณสมบัติ Maven ของโครงการอื่น ๆ ได้รับการดูแลโดยบุคคลที่สามและเป็นเรื่องยากที่จะได้รับการสนับสนุนสำหรับ Maven จากช่องทางการอย่างเป็นทางการ
ดังนั้นโซลูชันที่ต้องการสำหรับฟิลด์การพึ่งพาการสืบค้นคือการใช้บริการค้นหา Maven เพื่อค้นหา
ที่นี่ฉันแนะนำที่อยู่: mvnrepository.com
ต่อไปนี้เป็นตัวอย่างของการใช้ eclipse เพื่อเชื่อมโยงไดรเวอร์ MySQLJDBC ก่อนหน้านี้โปรดยืนยันว่าสนับสนุน Maven ใน Help-> เกี่ยวกับ abouteclipse:
ใน Eclipse เวอร์ชันใหม่อย่างเป็นทางการการสนับสนุน Maven นั้นมีอยู่แล้ว หากเวอร์ชันเก่ากว่าคุณสามารถติดตั้งปลั๊กอิน Maven
ก่อนอื่นให้สร้างโครงการ Maven ใหม่, New-> Project-> MavenProject-> createasimpleProject (SkipArcheTypesElection)
ต่อไปนี้เป็นขั้นตอนที่สำคัญที่สุด กรอกข้อมูลในฟิลด์การพึ่งพาเช่น GroupID ของโครงการนี้ ฟิลด์ที่กรอกข้อมูลที่นี่จะถูกใช้เมื่อโครงการอื่น ๆ ขึ้นอยู่กับพวกเขา ชิ้นส่วนที่ไม่ได้รับการปรับปรุงเป็นทางเลือก:
หลังจากนั้นเราค้นหา "mysql jdbc" ที่ mvnrepository.com
เร็ว ๆ นี้เราพบผลลัพธ์และคลิกเพื่อดูข้อมูลเวอร์ชันโดยละเอียด:
นี่คือรายการของหลายเวอร์ชันและการใช้งานของ MySQL JDBC ที่นี่เราเลือกรุ่นใหม่ที่สอง 5.1.34:
คัดลอกเนื้อหาในกล่อง Maven และเขียนลงใน <การพึ่งพาของ POM>:
<Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http:/MANCMMMMMMMMMMMMMMMMMMMMMMMMMMBM http://maven.apache.org/xsd/maven-4.0.0.xsd "> <S Modelversion> 4.0.0 </modelversion> <moderversion> <moderversion> <RoupID> MySQL </GroupID> <ArtIfactId> MySQL-Connector-Java </artifactId> <Sersion> 5.1.34 </SerfiS
หลังจากแถบการอ่านความคืบหน้าสิ้นสุดลงคุณจะเห็นว่ามีการพึ่งพา Maven มากขึ้นในโครงการและคุณสามารถค้นหาแพ็คเกจไดรเวอร์ JDBC ที่เราเพิ่งแนะนำ:
[คุณสมบัติอื่น ๆ ]
1. แหล่งที่มาของกระจก
เห็นได้ชัดว่าคลังสินค้ากลาง Maven มีภาระค่อนข้างใหญ่และไม่ได้อยู่ในประเทศจีนดังนั้นความเร็วจะช้ามากและบางครั้งการพึ่งพาไม่สามารถพบได้ ดังนั้นโดยเฉพาะอย่างยิ่งในโอกาสการพัฒนาทีมขนาดเล็กการสร้างเซิร์ฟเวอร์ส่วนตัว Maven จะปรับปรุงประสิทธิภาพอย่างมาก นี่คือเครื่องมือสร้างภาพ Maven: Nexus: http://www.sonatype.org/nexus/
ใช้เพื่อสร้างแหล่งภาพ maven ส่วนตัวอย่างรวดเร็วและง่ายดายจากนั้นกำหนดค่าใน maven settings.xml
2. การดาวน์โหลดซอร์สโค้ด SRC ขี้เกียจ
ในบางครั้งเราต้องอ้างถึงไฟล์ต้นฉบับที่ขึ้นอยู่กับโครงการ ในเวลานี้เราสามารถพยายามดับเบิลคลิกที่ไฟล์คลาสโดยตรง หากมีไฟล์ต้นฉบับในแหล่งกำเนิดภาพ Maven มันจะถูกดาวน์โหลดไปยังพื้นที่ท้องถิ่นโดยอัตโนมัติและ Eclipse จะโหลดและแสดงผลโดยอัตโนมัติ
3. การกำหนดค่าพารามิเตอร์คอมไพล์
ผู้เขียนใช้เวอร์ชัน eclipseluna Maven เวอร์ชันการรวบรวม Java เริ่มต้นคือ 1.5 เราสามารถระบุเวอร์ชันการรวบรวมใน POM เพื่อปรับปรุงเป็น 1.7 (ดูแท็กบิลด์ใน luajavapom); นอกจากนี้การตั้งค่าเหล่านี้จะถูกอ่านและกำหนดค่าอย่างเหมาะสมโดยเครื่องมืออัตโนมัติเช่น Jenkins Integration อย่างต่อเนื่อง
สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับการเข้าใจ Maven อย่างรวดเร็ว ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!