为什么Spring 3在使用Maven时需要显式的cglib依赖声明?

Jer*_*nce 26 spring dependencies maven-2 maven

我正在使用Spring 3和Maven.我在我的pom.xml中定义了所有spring模块.

当我使用时<aop:scoped-proxy />,我得到一个错误,说CGLIB丢失了.

好吧......我把CGLIB添加为我的pom中的一个依赖项,它全部运行...

我有点困惑...... Maven是一个依赖管理器......当我使用spring-aop模块时为什么不下载CGLIB?

这不是唯一的情况......为什么有些项目需要显式依赖声明而不是使用Maven传递依赖机制?

小智 52

这是因为cglib被标记为可选依赖项.

基本上,对于spring-aop库的每次使用,你都不需要cglib,因此maven不会自动下载它.不幸的是,您需要手动指定它.


Pas*_*ent 17

我有点困惑...... Maven是一个依赖管理器...当我使用spring-aop模块时为什么不下载cglib?

因为不是每个人都使用CGLIB(Spring中的AOP代理可以是JDK动态代理或CGLIB代理)所以CGLIB被标记为spring-aop pom中的可选依赖项,如果要使用它,则必须明确添加它.这正是可选依赖项的用途.

另一个类似的例子是Hibernate,它允许你以相同的方式在hibernate-core中选择cglib和javassist .Hibernate也可以让你选择不同的连接池之间(如果你决定使用其中之一)或缓存提供商(仅ehcache的,默认的,未声明为可选).


Mik*_*ell 5

我的猜测是默认情况下在Spring中没有启用cglib.因此,除非您明确启用它,否则它不会包含在pom中.

据我所知,Maven无法进入Spring配置文件并确定是否需要其他可选的库.虽然,如果有可能通过插件动态修改pom,这听起来肯定会是一个很酷的Spring-Maven插件.不确定是不是,但它会很酷.