มีวิธีง่ายๆในการลบการอ้างอิงที่ไม่ได้ใช้จาก maven pom.xml หรือไม่?


277

ฉันมีโครงการ Maven ขนาดใหญ่ที่มีโมดูลมากมายและอีกมากมาย pom.xmlไฟล์โครงการมีการเปลี่ยนแปลงและฉันสงสัยว่าปอมมีการขึ้นต่อกันที่ไม่จำเป็นบางอย่าง มีคำสั่งที่ลบการอ้างอิงที่ไม่ได้ใช้ออกจาก pom หรือไม่?


2
หากคุณใช้ IntelliJ ให้ดูสิ่งนี้: jonnyzzz.com/blog/2013/05/13/…ในกรณีที่ลิงก์ตาย: ปลั๊กอิน Jonnyzzz Dependencies
Benj

3
@Benj ฉันพยายามใช้ปลั๊กอิน jonnyzz นี้และมันก็ไร้ประโยชน์ ส่วนใหญ่เวลาจะไม่พบการขึ้นต่อกันที่ไม่ได้ใช้และบางครั้งเมื่อมันจะลบการขึ้นต่อกันจากคลาสพา ธ ที่ไม่ได้มาจากไฟล์ build.gradle ฉันไม่สามารถหาเอกสารที่เหมาะสมเพื่ออธิบายว่าปลั๊กอินนี้ทำงานอย่างไร
vaibhav.g

@ vaibhav.g ขอบคุณสำหรับการอัปเดต ดูเหมือนว่าสิ่งต่าง ๆ จะเปลี่ยนแปลงไปตั้งแต่ปี 2559
Benj

คำตอบ:


222

Maven พึ่งพาปลั๊กอินจะช่วยโดยเฉพาะอย่างยิ่งdependency:analyzeเป้าหมาย:

dependency:analyzeวิเคราะห์การพึ่งพาของโครงการนี้และกำหนดว่า: ใช้และประกาศ; ใช้และไม่ได้ประกาศ; ไม่ได้ใช้และประกาศ

สิ่งที่อาจช่วยให้ทำล้างบางก็คือรายงานการพึ่งพาบรรจบจากMaven โครงการข้อมูลรายงานปลั๊กอิน


5
ฉันจะเรียกสิ่งนี้ใน Eclipse ได้อย่างไร
Daniil Shevelev

134
จงระวังด้วยการพึ่งพา: วิเคราะห์บางไลบรารีที่ใช้ที่รันไทม์ถูกพิจารณาว่าไม่ได้ใช้
Nereis

27
เพื่อป้องกันการรายงานรันไทม์และการอ้างอิงที่ไม่ได้ใช้งานignoreNonCompileตัวเลือกสามารถตั้งค่าเป็นจริง
sudeep

ระวังในขณะที่ใช้การพึ่งพา: วิเคราะห์แม้ฉันใช้ 'ejp api3'depedency แต่รายงานแสดงว่า' ไม่ได้ใช้และประกาศ '
Akhil S Kamath

เพื่อให้เข้าใจถึงผลลัพธ์ของการวิเคราะห์ให้ดูคำตอบนี้: "การอ้างอิงที่ไม่ได้ประกาศใช้คือสิ่งที่จำเป็น แต่ไม่ได้ประกาศอย่างชัดเจนว่าเป็นการอ้างอิงในโครงการของคุณ" - stackoverflow.com/questions/4565740/…
Janac Meena

49

คุณสามารถใช้ได้ dependency:analyze -DignoreNonCompile

สิ่งนี้จะพิมพ์รายการของการอ้างอิงที่ไม่ได้ประกาศและไม่ได้ประกาศใช้ (ในขณะที่ละเว้นruntime/ provided/ test/ systemขอบเขตสำหรับการวิเคราะห์การพึ่งพาที่ไม่ได้ใช้)

โปรดใช้ความระมัดระวังขณะใช้งานบางไลบรารีที่ใช้ที่runtimeถือว่าไม่ได้ใช้

สำหรับรายละเอียดเพิ่มเติมอ้างอิงลิงค์นี้


4
[บวก] 1 สำหรับการกล่าวถึงรันไทม์!
gaurav

1
คุณพูดถูกการอ้างถึงรันไทม์บางอย่างถูกตัดสินว่าไม่ได้ใช้ แต่จริง ๆ แล้วต้องการ
Coder อัจฉริยะ

43

ดังที่คนอื่น ๆ พูดคุณสามารถใช้การพึ่งพา: วิเคราะห์เป้าหมายเพื่อค้นหาการพึ่งพาที่ถูกใช้และประกาศใช้และไม่ประกาศหรือไม่ได้ใช้และประกาศ คุณอาจพบว่าพึ่งพา: analy-dep-mgtมีประโยชน์ในการค้นหาไม่ตรงกันในส่วนการพึ่งพาการจัดการของคุณ

คุณสามารถลบการอ้างอิงโดยตรงที่ไม่ต้องการออกจาก POM ของคุณได้ แต่ถ้ามีการแนะนำให้ใช้กับขวดของบุคคลที่สามคุณสามารถใช้<exclusions>แท็กในการอ้างอิงเพื่อแยกขวดของบุคคลที่สามออก (ดูหัวข้อการยกเว้นการพึ่งพาสำหรับรายละเอียดและการสนทนา) . นี่คือตัวอย่างที่ไม่รวมการบันทึกทั่วไปจากการขึ้นต่อกันของ Spring:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring</artifactId>
  <version>2.5.5</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions> 
</dependency>

3
(IntelliJ) ฉันใช้ปลั๊กอิน Jonnyzzz ตามที่แสดงความคิดเห็นกับคำถาม ปลั๊กอินที่ดีทำงานได้ดีกับ IntelliJ 2016.1.3
Benj

34

คุณดูที่ปลั๊กอินการพึ่งพา Mavenหรือไม่? สิ่งนั้นจะไม่ลบสิ่งต่าง ๆ ให้คุณ แต่มีเครื่องมือที่ช่วยให้คุณทำการวิเคราะห์ด้วยตัวเอง ฉันกำลังคิดอย่างยิ่ง

mvn dependency:tree

1
ยอดเยี่ยม - ขอบคุณ (ไม่สามารถหาสิ่งที่ผมต้องการให้ผมเก็บไว้ค้นหาคำว่า "การอ้างอิงสะอาด" และมันก็ขว้างปาขึ้นปลั๊กอินสะอาด !! แต่ลักษณะนี้มีแนวโน้ม .. พึ่งพา mvn: วิเคราะห์)

14

ฉันมีปัญหาแบบเดียวกันและตัดสินใจที่จะเขียนสคริปต์ที่ลบการอ้างอิงสำหรับฉัน การใช้ที่ฉันได้รับมากกว่าครึ่งพึ่งพาค่อนข้างง่าย

http://samulisiivonen.blogspot.com/2012/01/cleanin-up-maven-dependencies.html


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