Αντιμετώπιση συγκρούσεων εξαρτήσεων Maven με dependency:tree


Δημοσιεύτηκε:

Ενημερώθηκε:


Άρθρα › Αντιμετώπιση συγκρούσεων εξαρτήσεων Maven με dependency:tree

Κατάσταση το 2026 και ασφαλής χρήση

Συμπέρασμα: Εκτελέστε το mvn dependency:tree, ελέγξτε το επιλυμένο γράφημα και εντοπίστε τη διαδρομή που εισήγαγε την απροσδόκητη έκδοση. Διορθώστε έπειτα τη δήλωση με ενημερωμένη άμεση εξάρτηση, dependencyManagement ή με μια συγκεκριμένη και τεκμηριωμένη εξαίρεση.

Τι θα μάθετε

  • Πώς ο κανόνας της «πλησιέστερης δήλωσης» μπορεί να αποκρύψει μια ζητούμενη μεταβατική έκδοση.
  • Πώς η αναλυτική και φιλτραρισμένη έξοδος δέντρου εξαρτήσεων περιορίζει μια διένεξη.
  • Γιατί η διαγραφή αρχείων τοπικού αποθετηρίου ή η προσθήκη τυχαίων εξαιρέσεων δεν είναι μια σταθερή λύση.

Σε ποιους απευθύνεται: Προγραμματιστές Java που διερευνούν σφάλματα σύνδεσης, μη αναμενόμενες κλάσεις ή ευάλωτες μεταβατικές εκδόσεις.

Ισχύει το 2026: Οι επιλογές του plugin διαφέρουν ανά έκδοση, επομένως ελέγξτε την τρέχουσα τεκμηρίωση του Maven Dependency Plugin. Συνδυάστε την εξέταση του γραφήματος με εγκεκριμένη διαδικασία ανάλυσης σύνθεσης λογισμικού. Ένα καθαρό δέντρο δεν αποδεικνύει από μόνο του ότι η εξάρτηση είναι ασφαλής.

Σημείωση ασφαλείας: Οι εντολές και τα παραδείγματα ρυθμίσεων του αρχικού άρθρου δεν έχουν εκτελεστεί ξανά σε σύγχρονο περιβάλλον παραγωγής. Πριν από την εφαρμογή, ελέγξτε τις υποστηριζόμενες εκδόσεις, δημιουργήστε αντίγραφα ασφαλείας και προετοιμάστε σχέδιο επαναφοράς σε ξεχωριστό περιβάλλον δοκιμών.

Επίσημες πηγές

Επισκόπηση

Πώς να ελέγξετε για συγκρούσεις βιβλιοθηκών στο Maven. Το Maven επιλύει αυτόματα τις εξαρτήσεις της βιβλιοθήκης jar, αλλά η προεπιλεγμένη διαμόρφωση δεν σας ενημερώνει για τις συγκρούσεις. Αυτός είναι ο τρόπος ελέγχου για συγκρούσεις βιβλιοθηκών στο Maven σε τέτοιες περιπτώσεις.

Περιεχόμενα

  1. Όταν συμβαίνουν συγκρούσεις βιβλιοθηκών στο Maven
  2. Πώς να ελέγξετε
  3. Σύνοψη

1. Όταν συμβαίνουν συγκρούσεις βιβλιοθηκών στο Maven

Το Maven επιλύει αυτόματα τις εξαρτήσεις βιβλιοθηκών Java. Η αυτόματη επίλυση εξαρτήσεων σημαίνει ότι αν έχετε ένα αρχείο Jar που χρειάζεστε, θα πάρει αυτόματα το Jar που απαιτείται για την εκτέλεση αυτού του Jar. Για περισσότερες πληροφορίες σχετικά με το πώς λειτουργεί η επίλυση συγκεκριμένων εξαρτήσεων βιβλιοθηκών, ανατρέξτε στο ακόλουθο άρθρο.

Πώς το Maven επιλύει αυτόματα τις εξαρτήσεις βιβλιοθηκών JAR.

Ωστόσο, όταν εμφανίζονται συγκρούσεις βιβλιοθηκών, δεν επιλύονται αυτόματα. Επιπλέον, αν δεν έχετε τις ρυθμίσεις στη θέση τους, δεν μπορείτε καν να εντοπίσετε μια σύγκρουση. Θα θέλαμε να περιγράψουμε τον τρόπο ελέγχου για συγκρούσεις βιβλιοθηκών.

2. Πώς να ελέγξετε

Υπάρχουν δύο κύριοι τρόποι για να ελέγξετε για συγκρούσεις στη βιβλιοθήκη

  • Εισαγωγή των plug-ins
  • Επιβεβαίωση πριν από την κατασκευή με εντολή.

Το 'Install plug-ins' είναι μια μέθοδος προσθήκης ρυθμίσεων στο pom.xml. 'Έλεγχος με εντολή πριν από την κατασκευή' σημαίνει κυριολεκτικά χειροκίνητος έλεγχος με μια εντολή πριν από την κατασκευή. Θα ήθελα να σας εξηγήσω πώς να το κάνετε αυτό συγκεκριμένα.

2-1. Εισαγωγή των plug-ins

Οι ακόλουθοι ιστότοποι του Maven μπορούν να σας βοηθήσουν.

http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html

Προσθέστε τις ακόλουθες ρυθμίσεις στο pom.xml.

pom.xml


<project>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.0.0-M3</version>
        <executions>
          <execution>
            <id>enforce</id>
            <configuration>
              <rules>
                <dependencyConvergence/>
              </rules>
            </configuration>
            <goals>
              <goal>enforce</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

Εάν εισαχθούν οι παραπάνω ρυθμίσεις, εμφανίζεται το ακόλουθο σφάλμα και η κατασκευή αποτυγχάνει εάν υπάρχουν συγκρούσεις βιβλιοθηκών κατά τη στιγμή της κατασκευής.

[WARNING] 
Dependency convergence error for org.apache.commons:commons-collections4:4.1 paths to dependency are:
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
  +-org.apache.poi:poi:3.17
    +-org.apache.commons:commons-collections4:4.1
and
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
  +-org.apache.commons:commons-collections4:4.0

[WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability. See above detailed error message.

Αν εφαρμοστεί μια κατασκευή χωρίς πρόσθετα, δεν εμφανίζονται σφάλματα και η κατασκευή τερματίζεται κανονικά. Αν θέλετε να εντοπίζετε συγκρούσεις, φροντίστε να το ρυθμίσετε αυτό.

2-2. Επιβεβαίωση πριν από την κατασκευή με εντολή.

Οι εξαρτήσεις ελέγχονται με τις ακόλουθες εντολές

mvn dependency:tree -Dverbose

και εμφανίζεται η ένδειξη "παραλείπεται για σύγκρουση" εάν υπάρχει σύγκρουση. Είναι επίσης δυνατό να περιορίσετε την έξοδο μόνο στις περιοχές όπου υπάρχουν συγκρούσεις, όπως στην ακόλουθη εντολή. Σημείωση:'find' είναι η εντολή για τα Windows. Για το Linux, αυτό είναι το 'grep'.

mvn dependency:tree -Dverbose | find "omitted for conflict"

Οι συγκρούσεις βιβλιοθηκών μπορούν να ελεγχθούν εξετάζοντας τα αποτελέσματα των παραπάνω εντολών.

3. περίληψη

Αν θέλετε να εντοπίζετε αξιόπιστα τις συγκρούσεις βιβλιοθηκών, συνιστούμε την επιλογή 'Εγκατάσταση πρόσθετων προγραμμάτων'. Η εισαγωγή πρόσθετων προγραμμάτων διασφαλίζει ότι τυχόν συγκρούσεις θα γίνουν αντιληπτές, καθώς η κατασκευή θα αποτύχει.

Αυτά είναι τα βασικά βήματα και οι περιορισμοί που πρέπει να ληφθούν υπόψη.