จะได้รับแผนผังการพึ่งพาสำหรับสิ่งประดิษฐ์ได้อย่างไร?


123

dependency:treeสามารถใช้เพื่อดูแผนผังการพึ่งพาสำหรับโครงการที่กำหนด แต่สิ่งที่ฉันต้องการคือดูแผนผังการพึ่งพาสำหรับสิ่งประดิษฐ์ของบุคคลที่สาม

ฉันเดาว่าฉันสามารถสร้างโปรเจ็กต์เปล่า ๆ ได้ แต่ฉันกำลังมองหาสิ่งที่ง่ายกว่า (ฉันต้องทำสิ่งนี้สำหรับสิ่งประดิษฐ์หลายชิ้น)

คำตอบ:


158

1) ใช้ปลั๊กอินการพึ่งพา maven

สร้างโปรเจ็กต์ง่ายๆด้วย pom.xml เท่านั้น เพิ่มการพึ่งพาของคุณและเรียกใช้:

mvn dependency:tree

น่าเสียดายที่mojo การพึ่งพาต้องใช้ pom.xml มิฉะนั้นคุณจะได้รับข้อผิดพลาดต่อไปนี้:

ไม่สามารถเรียกใช้ mojo: tree ต้องใช้โปรเจ็กต์ที่มี pom.xml อยู่แล้ว แต่บิวด์ไม่ได้ใช้อย่างใดอย่างหนึ่ง

2) ค้นหา pom.xml ของสิ่งประดิษฐ์ของคุณในที่เก็บส่วนกลาง maven

การอ้างอิงมีอธิบายไว้ใน pom.xml ของสิ่งประดิษฐ์ของคุณ ค้นหาโดยใช้โครงสร้างพื้นฐาน maven

ไปที่http://search.maven.org/และป้อน groupId และ artifactId ของคุณ

หรือคุณสามารถไปที่http://repo1.maven.org/maven2/และนำทางก่อนโดยใช้ plugins groupId จากนั้นใช้ artifactId และสุดท้ายใช้เวอร์ชัน

ตัวอย่างเช่นดูที่org.springframework: spring-core

3) ใช้ปลั๊กอินการพึ่งพา maven กับสิ่งประดิษฐ์ของคุณ

ส่วนหนึ่งของสิ่งประดิษฐ์การพึ่งพาคือ pom.xml ที่ระบุว่ามันขึ้นอยู่กับ และคุณสามารถเรียกใช้mvn dependency: treeบน pom นี้


3
อย่างที่ฉันพูดฉันต้องการหลีกเลี่ยงความจำเป็นในการสร้างโครงการ
IttayD

คุณไม่ได้กำลัง 'สร้าง' โปรเจ็กต์คุณแค่ดาวน์โหลดไฟล์ POM
Sean Patrick Floyd

1
คุณไม่จำเป็นต้องสร้างโครงการใหม่ เพียงแค่ดูที่เก็บในเครื่องของคุณและค้นหา pom.xml ของ atifact
amra

สิ่งนี้จะใช้ไม่ได้หากไม่มีโมดูลลูก เช่น `` mvn -f ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap-descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10 pom depen dency: tree [INFO] กำลังสแกนหาโปรเจ็กต์ ... [ERROR] [ERROR] พบปัญหาบางอย่างขณะประมวลผล POM: [ERROR] โมดูลลูก ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap -descriptors-parent / 2.0.0-alpha-10 / api-base ของ ... / descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10.pom ไม่ มีอยู่ ``
Ding-Yi Chen

1
สำหรับโครงการ Maven แบบหลายโมดูล (เช่นโครงการที่มีpom.xmlไฟล์หลายไฟล์) คุณอาจได้รับข้อผิดพลาด ลองmvn compile dependency:treeแล้ว
izogfif

49

หากคุณรำคาญการสร้างโครงการตัวอย่างและเพิ่มการอ้างอิงของบุคคลที่สามของคุณคุณสามารถเรียกใช้สิ่งต่อไปนี้เพื่อดูลำดับชั้นทั้งหมดของการอ้างอิง

คุณสามารถค้นหาสิ่งประดิษฐ์เฉพาะโดยใช้คำสั่ง maven นี้:

mvn dependency:tree -Dverbose -Dincludes=[groupId]:[artifactId]:[type]:[version]

ตามเอกสาร:

โดยที่แต่ละส่วนของรูปแบบเป็นทางเลือกและรองรับอักขระตัวแทน * แบบเต็มและบางส่วน ส่วนของรูปแบบที่ว่างเปล่าจะถือว่าเป็นตัวแทนโดยปริยาย

ลองนึกภาพว่าคุณกำลังพยายามค้นหาไฟล์ jar 'log4j-1.2-api' จากโมดูลต่างๆในโครงการของคุณ:

mvn dependency:tree -Dverbose -Dincludes=org.apache.logging.log4j:log4j-1.2-api

ข้อมูลเพิ่มเติมสามารถพบได้ที่นี่

แก้ไข:โปรดทราบว่าแม้จะมีข้อดีของการใช้พารามิเตอร์verboseแต่ก็อาจไม่ถูกต้องในบางเงื่อนไข เนื่องจากใช้อัลกอริทึม Maven 2 และอาจให้ผลลัพธ์ที่ไม่ถูกต้องเมื่อใช้กับ Maven 3


2
ข้อเสนอแนะที่ยอดเยี่ยม! -Dverboseก็เพียงพอที่จะแสดงให้ฉันเห็นต้นไม้เต็มรูปแบบที่ฉันต้องการ วางเอาต์พุตไปยังlessหรือคล้ายกันและทำการค้นหาอย่างรวดเร็วใช้งานได้ดีหากคุณจำincludesแฟgroupId
ล็ก

สิ่งนี้ใช้ไม่ได้หากไม่มี pom.xml ที่มีสิ่งประดิษฐ์ที่คุณกำลังดูอยู่ มิฉะนั้นคุณจะได้รับ[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:tree (default-cli): Goal requires a project to execute but there is no POM in this directory (...). Please verify you invoked Maven from the correct directory. -> [Help 1]
Eisenknurr

-Dverbose เลิกใช้งานแล้วในปลั๊กอินการพึ่งพาดังนั้นจึงไม่สามารถใช้งานได้อีกต่อไปเว้นแต่คุณจะใช้เวอร์ชันเก่า
toolforger

6

วิธีแก้ปัญหาคือการเรียก dependency: tree ด้วยไฟล์ pom.xml ของสิ่งประดิษฐ์:

mvn -f "$HOME/.m2/repository/$POM_PATH" dependency:tree

ดูเพิ่มเติมวิธีแสดงรายการการอ้างอิงสกรรมกริยาของสิ่งประดิษฐ์จากที่เก็บ


สิ่งนี้อาจใช้ไม่ได้กับอาร์ติแฟกต์ที่ดาวน์โหลดจากที่เก็บส่วนกลางเนื่องจาก "distributionManagement.status" มันถูกเพิ่มโดยที่เก็บส่วนกลางในการอัปโหลด และสิ่งนี้จะทำให้การพึ่งพา: การตรวจสอบความล้มเหลวของทรีในไฟล์ pom ดูissue.apache.org/jira/browse/MNG-3178
Arnaud Jeansen

2

หากคุณใช้m2eclipseเวอร์ชันปัจจุบัน(ซึ่งคุณควรใช้หากคุณใช้ eclipse และ maven):

เลือกรายการเมนู

Navigate -> Open Maven POM

และป้อนสิ่งประดิษฐ์ที่คุณกำลังมองหา

pom จะเปิดขึ้นในตัวแก้ไข pom ซึ่งคุณสามารถเลือกแท็บDependency Hierarchyเพื่อดูลำดับชั้นการพึ่งพา (ตามชื่อที่แนะนำ :-))


2
ตกลงคำตอบนี้สำหรับผู้ใช้รายอื่น :-)
Sean Patrick Floyd

1

หากสิ่งประดิษฐ์ของคุณไม่ได้เป็นเมืองขึ้นของโครงการที่กำหนดทางออกที่ดีที่สุดของคุณคือการใช้เครื่องมือค้นหาพื้นที่เก็บข้อมูล หลายคนอธิบายถึงการอ้างอิงของสิ่งประดิษฐ์ที่กำหนด


สิ่งประดิษฐ์ที่ฉันสนใจเป็นส่วนหนึ่งของผลิตภัณฑ์ของ บริษัท
IttayD

คำตอบของอัมราคือทางออกที่ดีที่สุดของคุณฉันกลัว
Sean Patrick Floyd

@IttayD: ทำไมคุณไม่พูดถึงรายละเอียดที่สำคัญแบบนี้ในคำถามของคุณ? สิ่งนี้จะช่วยให้ได้คำตอบที่ดีขึ้นของ IMHO (และอาจช่วยให้ผู้อ่านไม่เสียเวลาไปเปล่า ๆ )
Pascal Thivent

0

หากคุณต้องการได้รับการแสดงกราฟิกที่สามารถค้นหาได้ของแผนผังการอ้างอิง (รวมถึงโมดูลทั้งหมดจากโครงการของคุณการอ้างอิงแบบสกรรมกริยาและข้อมูลการขับไล่) โปรดดู UpdateImpact: https://app.updateimpact.com (บริการฟรี)

ข้อจำกัดความรับผิดชอบ: ฉันเป็นหนึ่งในผู้พัฒนาเว็บไซต์นี้


0

ฉันรู้ว่าโพสต์นี้ค่อนข้างเก่า แต่ถึงกระนั้นหากใครก็ตามที่ใช้IntelliJต้องการดูแผนผังการพึ่งพาโดยตรงใน IDE ก็สามารถติดตั้งปลั๊กอิน Maven Helper Pluginได้

เมื่อติดตั้ง pom.xml แล้วคุณจะเห็นแท็บDependency Analyzeดังด้านล่าง นอกจากนี้ยังมีตัวเลือกในการดูการพึ่งพาที่ขัดแย้งกันเท่านั้นและยังเป็นโครงสร้างต้นไม้

ใส่คำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.