Как найти конфликты зависимостей в сторонних библиотеках

Я ищу способ найти конфликты зависимостей в сторонних библиотеках. Я знаю о mvn dependency:tree, его вариантах -Dverbose и -Dincludes. Это работает хорошо, но имеет пару недостатков:

  • Мне нужно настроить файл pom.xml со сторонней зависимостью. Это несколько окольный путь и утомительный для быстрого просмотра зависимостей пары библиотек.
  • dependency:tree загружает все зависимости, что может быть медленным и потреблять много трафика для больших графов зависимостей.
  • dependency:tree -Dverbose действительно показывает конфликты, но он довольно подробный, поскольку также показывает все неконфликтующие зависимости.

person michid    schedule 18.02.2021    source источник


Ответы (1)


Это может сделать CLI преобразователя зависимостей Coursier. Например. чтобы найти конфликты зависимостей в com.bynder:bynder-java-sdk:2.2.8, вы можете использовать команду Coursier resolve с флагом --conflict:

$ cs resolve --conflicts   com.bynder:bynder-java-sdk:2.2.8 

org.jetbrains.kotlin:kotlin-stdlib-common:1.4.10 was selected, but
  com.squareup.okio:okio:2.8.0 wanted version 1.4.0

io.reactivex.rxjava2:rxjava:2.2.20 was selected, but
  com.squareup.retrofit2:adapter-rxjava2:2.9.0 wanted version 2.0.0

com.squareup.okhttp3:okhttp:4.9.0 was selected, but
  com.squareup.retrofit2:retrofit:2.9.0 wanted version 3.14.9

org.jetbrains.kotlin:kotlin-stdlib:1.4.10 was selected, but
  com.squareup.okio:okio:2.8.0 wanted version 1.4.0

Это выводит список конфликтов и ничего больше. Никакие артефакты не загружаются, кроме его метаданных, и весь процесс выполняется очень быстро.

Для дальнейшего изучения, где конфликт, например. com.squareup.okhttp3:okhttp исходит, можешь бежать

$ cs resolve com.bynder:bynder-java-sdk:2.2.8 --what-depends-on com.squareup.okhttp3:okhttp
  Result:
└─ com.squareup.okhttp3:okhttp:4.9.0
   ├─ com.squareup.okhttp3:logging-interceptor:4.9.0
   │  └─ com.bynder:bynder-java-sdk:2.2.8
   └─ com.squareup.retrofit2:retrofit:2.9.0 com.squareup.okhttp3:okhttp:3.14.9 -> 4.9.0
      ├─ com.bynder:bynder-java-sdk:2.2.8
      ├─ com.squareup.retrofit2:adapter-rxjava2:2.9.0
      │  └─ com.bynder:bynder-java-sdk:2.2.8
      └─ com.squareup.retrofit2:converter-gson:2.9.0
         └─ com.bynder:bynder-java-sdk:2.2.8

На выходе получается обратное дерево зависимостей, показывающее все поддеревья, зависящие от com.squareup.okhttp3:okhttp.

person michid    schedule 18.02.2021