Jak sprawdzić konflikty bibliotek w Mavenie


Data publikacji:20 stycznia 2021 r.



INFOMARTION > Jak sprawdzić konflikty bibliotek w Mavenie

Przegląd.

Jak sprawdzić konflikty bibliotek w Mavenie. Maven automatycznie rozwiązuje zależności dla biblioteki jar, ale domyślna konfiguracja nie informuje o konfliktach. Oto jak w takich przypadkach sprawdzić konflikty bibliotek w Mavenie.

Spis treści

  1. Kiedy w Mavenie występują konflikty bibliotek
  2. Jak sprawdzić
  3. streszczenie

1. Kiedy w Mavenie występują konflikty bibliotek

Maven automatycznie rozwiązuje zależności od bibliotek Java. Automatyczne rozwiązywanie zależności oznacza, że jeśli potrzebny jest plik Jar, to program automatycznie pobierze plik Jar potrzebny do jego uruchomienia. Więcej informacji o tym, jak działa rozwiązywanie zależności między poszczególnymi bibliotekami, można znaleźć w poniższym artykule.

Jak Maven automatycznie rozwiązuje zależności bibliotek w słoiku.

Jednak w przypadku wystąpienia konfliktów bibliotecznych nie są one rozwiązywane automatycznie. Co więcej, jeśli nie ma odpowiednich ustawień, nie można nawet wykryć konfliktu. Chcielibyśmy opisać, w jaki sposób można sprawdzić, czy w bibliotece nie występują konflikty.

2. Jak sprawdzić

Istnieją dwa główne sposoby sprawdzenia, czy w bibliotece nie występują konflikty

  • Wprowadzanie wtyczek
  • Potwierdzenie wstępnej kompilacji za pomocą polecenia.

Polecenie "Zainstaluj wtyczki" to metoda dodawania ustawień do pliku pom.xml. Polecenie "Sprawdź za pomocą polecenia przed budową" oznacza dosłowne ręczne sprawdzenie za pomocą polecenia przed budową. Chciałbym wyjaśnić, jak konkretnie to zrobić.

2-1. Wprowadzanie wtyczek

Pomocne mogą być następujące strony internetowe dotyczące Mavena.

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

Dodaj następujące ustawienia do pliku 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>

Jeśli powyższe ustawienia zostaną wprowadzone, wystąpi następujący błąd i kompilacja nie powiedzie się, jeśli w czasie kompilacji wystąpią konflikty bibliotek.

[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.

Jeśli zastosowano kompilację bez wtyczek, nie występują żadne błędy i kompilacja kończy się normalnie. Jeśli chcesz wykrywać konflikty, pamiętaj, aby to skonfigurować.

2-2. Potwierdzenie wstępnej kompilacji za pomocą polecenia.

Zależności są sprawdzane za pomocą następujących poleceń

mvn dependency:tree -Dverbose

a w przypadku wystąpienia konfliktu wyświetlany jest komunikat "pominięto w poszukiwaniu konfliktu". Można również zawęzić dane wyjściowe tylko do tych obszarów, w których występują konflikty, jak w poniższym poleceniu. ※Polecenie 'find' jest przeznaczone dla systemu Windows. W systemie Linux jest to polecenie "grep".

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

Konflikty bibliotek można sprawdzić, przeglądając wyniki powyższych poleceń.

3. streszczenie

Jeśli chcesz niezawodnie wykrywać konflikty bibliotek, zalecamy opcję "Zainstaluj wtyczki". Wprowadzenie wtyczek gwarantuje, że wszelkie konflikty zostaną zauważone, ponieważ kompilacja nie powiedzie się.

Dziękujemy, że oglądaliście do końca.