Ответ
Конфликт возникает, когда одна зависимость требует CGLIB 2.x, а ваш код или другая зависимость — CGLIB 3.x. Решение — явно исключить транзитивную зависимость старой версии и добавить новую.
Для Maven:
<dependency>
<groupId>org.example</groupId>
<artifactId>library-requires-cglib2</artifactId>
<version>1.0</version>
<!-- Исключаем транзитивную cglib:2.x -->
<exclusions>
<exclusion>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Явно добавляем нужную версию CGLIB -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
Для Gradle:
dependencies {
implementation('org.example:library-requires-cglib2:1.0') {
exclude group: 'cglib', module: 'cglib'
}
implementation 'cglib:cglib:3.3.0'
}
Важные замечания:
- Проверьте совместимость. CGLIB 3.x имеет изменения в API. Убедитесь, что библиотека, требующая версию 2.x, будет работать с 3.x. В противном случае может потребоваться обновить эту библиотеку или найти альтернативу.
- Анализ зависимостей. Используйте
mvn dependency:treeилиgradle dependencies, чтобы увидеть, какая именно библиотека приносит конфликтующую версию. - Spring и CGLIB. Spring Framework для AOP прокси использует CGLIB. Убедитесь, что выбранная версия CGLIB совместима с вашей версией Spring.