Почему Spring 3 требует явного объявления зависимостей cglib при использовании Maven? - PullRequest
26 голосов
/ 12 февраля 2010

Я использую Spring 3 и Maven. Я определил все весенние модули в моем pom.xml.

Когда я использую <aop:scoped-proxy />, я получаю сообщение о том, что CGLIB отсутствует.

Ну ... я добавляю CGLIB в качестве зависимости в моем pom, и все это работает ...

Я немного запутался ... Maven - менеджер зависимостей ... Почему он не загружает CGLIB, когда я использую модуль spring-aop?

Это не единственный случай ... Почему некоторые проекты нуждаются в явном объявлении зависимостей вместо использования механизма транзитивной зависимости Maven?

Ответы [ 4 ]

52 голосов
/ 12 февраля 2010

Это потому, что cglib помечен как необязательная зависимость .

По сути, вам не нужен cglib для каждого использования библиотеки spring-aop, поэтому maven не загружает его автоматически. Вы должны указать это вручную, к сожалению.

17 голосов
/ 12 февраля 2010

Я немного запутался ... Maven - менеджер зависимостей ... Почему он не загружает cglib, когда я использую модуль spring-aop?

Поскольку не все используют CGLIB (прокси AOP в Spring может быть динамическим прокси JDK или прокси CGLIB), поэтому CGLIB помечается как необязательная зависимость в pom spring-aop и вы должны добавить его явно, если хотите его использовать. Это именно то, для чего нужны необязательные зависимости.

Другим похожим примером является Hibernate, который позволяет вам выбирать между cglib и javassist в hibernate-core таким же образом. Hibernate также позволяет выбирать между различными пулами соединений (если вы решите использовать один из них) или провайдерами кэширования (только ehcache, по умолчанию, не объявляется необязательным).

5 голосов
/ 12 февраля 2010

Я думаю, что cglib не включен в Spring по умолчанию . И поэтому он не включен в pom, если вы явно не включите его.

Насколько я знаю, Maven не может зайти в ваши файлы конфигурации Spring и определить, нужны ли ему дополнительные необязательные библиотеки. Хотя, это, конечно, звучит так, как будто это был бы крутой плагин Spring-Maven, если бы можно было изменять pom на лету через плагин. Не уверен, что это так, но это было бы круто.

2 голосов
/ 30 июля 2015

Хорошие новости - это проблема прошлого :

Начиная с версии 3.2, больше не нужно добавлять CGLIB в ваш путь к классам проекта, так как классы CGLIB переупаковываются под org.springframework и включен непосредственно в JAR с пружинным сердечником. это означает, что поддержка прокси на основе CGLIB работает так же, как Динамические прокси JDK всегда имеют.

Подробнее здесь .

...