Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Spring3在使用Maven时需要显式的cglib依赖声明?_Spring_Maven 2_Dependencies_Maven - Fatal编程技术网

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

为什么Spring3在使用Maven时需要显式的cglib依赖声明?,spring,maven-2,dependencies,maven,Spring,Maven 2,Dependencies,Maven,我正在使用Spring3和Maven。我已经在pom.xml中定义了所有spring模块 当我使用时,我得到一个错误,说CGLIB丢失了 嗯。。。我在pom中添加CGLIB作为一个依赖项,它会运行 我有点困惑。。。Maven是一个依赖项管理器。。。为什么我使用SpringAOP模块时它不下载CGLIB 这不是唯一的情况。。。为什么有些项目需要显式依赖声明而不是使用Maven传递依赖机制?我的猜测是这样的。因此,除非您明确启用它,否则它不会包含在pom中 据我所知,Maven无法进入Spring配

我正在使用Spring3和Maven。我已经在pom.xml中定义了所有spring模块

当我使用
时,我得到一个错误,说CGLIB丢失了

嗯。。。我在pom中添加CGLIB作为一个依赖项,它会运行

我有点困惑。。。Maven是一个依赖项管理器。。。为什么我使用SpringAOP模块时它不下载CGLIB

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

我的猜测是这样的。因此,除非您明确启用它,否则它不会包含在pom中


据我所知,Maven无法进入Spring配置文件并确定它是否需要额外的可选启用库。尽管如此,如果可以通过插件动态修改pom,这听起来肯定像是一个酷炫的Spring Maven插件。不确定是否是,但它会很酷。

这是因为cglib被标记为

本质上,您不需要每次使用SpringAOP库都使用cglib,所以maven不会自动下载它。很遗憾,您需要手动指定它

我有点困惑。。。Maven是一个依赖项管理器。。。为什么我使用SpringAOP模块时它不下载cglib

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


另一个类似的例子是Hibernate,它允许您以相同的方式在cglib和javassist之间进行选择。Hibernate还允许您在各种连接池(如果您决定使用其中一个)或缓存提供程序(只有默认的ehcache未声明为可选)之间进行连接。

好消息-这是过去的问题:

从Spring3.2开始,不再需要将CGLIB添加到 项目类路径,因为CGLIB类在 org.springframework并直接包含在spring核心JAR中。这 这意味着基于CGLIB的代理支持的工作方式与 JDK动态代理始终具有


阅读更多。

@Jerome C。你不能指望maven自己找到所有东西,这不是一件神奇的事情,因为有时候存储库中不存在某些依赖项,有时候你需要手动下载它们。然而,它本应自行下载该依赖项,但事实并非如此,Maven远非完美,但它是所有其他构建工具中最接近的一个(尽管Maven不仅仅是一个构建工具)。@Pascal Thivent-hmm我想你没有理解我的评论,或者我以不理解的方式写了它,因为:1。如果依赖项在存储库中可用,并且pom包含所需信息,Maven将找到依赖项-”,因为有时存储库中不存在某些依赖项“2”。但是在spring和cglib的例子中,cglib是一个可选的依赖项,所以除非您明确地指定它—“您不能期望maven自己找到所有东西,这不是一件神奇的事情”->正如您所说,因为它是一个可选的依赖项,它找不到它。我在哪里wrong@PascalThivent无论如何,几周前我刚开始使用maven,它是一个非常好的工具/平台,但是每个人都知道你是一个经验丰富的用户,他们应该运用常识得出结论,你的帖子/评论可能比我的更正确。我个人喜欢阅读你关于Maven的帖子/评论,因为它们总是有用的,所以不要误会。Cheers@c0mrade也许我误解了你的评论。那样的话,我道歉。我会移除mine@PascalThivent别担心m8,请留下您的评论,因为它可能对某人有所帮助。确切地说,我只是发现了可选功能;)但是,当一个依赖项被声明为可选时,它只适用于doc?或者有一种方法可以在模块声明中激活它?@Jerome据我所知,依赖关系是在他们构建spring aop时下载的,而不是在您构建依赖spring aop的项目时下载的。如果有道理的话!CGLIB用于使CGLIB-PROXY管理未实现接口的注入(使用AOP)bean