Как да проверяваме за конфликти на библиотеки в Maven


Дата на публикуване:20 януари 2021 г.



INFOMARTION > Как да проверяваме за конфликти на библиотеки в Maven

Преглед.

Как да проверяваме за конфликти на библиотеки в Maven. Maven автоматично разрешава зависимостите за библиотеката jar, но конфигурацията по подразбиране не ви информира за конфликти. Ето как да проверите за конфликти на библиотеки в Maven в такива случаи.

Съдържание

  1. При възникване на конфликти на библиотеки в Maven
  2. Как да проверите
  3. резюме

1. При възникване на конфликти на библиотеки в Maven

Maven автоматично разрешава зависимостите на библиотеките на Java. Автоматичното разрешаване на зависимостите означава, че ако имате файл Jar, от който се нуждаете, той автоматично ще получи Jar, необходим за стартирането на този Jar. За повече информация относно начина на разрешаване на зависимостите на конкретни библиотеки вижте следната статия.

Как Maven автоматично разрешава зависимостите на библиотеките jar.

Когато обаче възникнат библиотечни конфликти, те не се разрешават автоматично. Нещо повече, ако не разполагате с необходимите настройки, дори не можете да откриете конфликт. Бихме искали да опишем как да проверим за конфликти в библиотеката.

2. Как да проверите

Има два основни начина да проверите за конфликти в библиотеката

  • Въвеждане на плъгини
  • Потвърждаване на предварителното изграждане чрез команда.

"Инсталиране на плъгини" е метод за добавяне на настройки в pom.xml. "Проверка с команда преди сглобяване" буквално означава ръчна проверка с команда преди сглобяване. Бих искал да обясня как да направя това конкретно.

2-1. Въвеждане на плъгини

Следните уебсайтове на 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. резюме

Ако искате надеждно да откривате конфликти на библиотеки, препоръчваме "Инсталиране на приставки". Въвеждането на плъгини гарантира, че всички конфликти ще бъдат забелязани, тъй като компилацията ще се провали.

Благодарим ви, че гледахте до края.