【问题标题】:Updating from Spring 3.0.5 to Spring 3.1.2 does not include aspectjrt as a dependency从 Spring 3.0.5 更新到 Spring 3.1.2 不包括 aspectjrt 作为依赖项
【发布时间】:2012-12-03 18:01:18
【问题描述】:

我正在从 Spring 3.0.5 更新到 Spring 3.1.2,并且在更新 Spring 安全核心的同时也更新到了 3.1.2,后者又依赖于 aspectjrt(在其 pom 中提到)但是在更新到 3.1.2 之后如果我使用

生成依赖关系树
dependency:tree

它不会在树中列出 aspectjrt,但是如果我使用 3.0.5 版本生成相同的树,aspectjrt 会在依赖树中列出。

另外,如前所述,我已经验证了两个 pom(版本 3.0.5 和 3.1.2)中都存在 aspectjrt 依赖项。

由于 aspectjrt 未列为依赖项,因此我的代码未编译,因为它需要来自 aspectjrt 的类。

如果我在我的 pom 中明确包含 aspectjrt 依赖项,我的代码编译成功。

有人知道为什么更新到 3.1.2 后会出现这个问题吗?为什么更新到 3.1.2 后没有将 aspectjrt 作为依赖项引入

是否有任何解决方法,否则我将不得不在我的 pom 中包含 aspectjrt 作为显式依赖项。

【问题讨论】:

    标签: spring spring-security aspectj


    【解决方案1】:

    AspectJ 在 Spring POM 中被声明为 optional dependency。这意味着构建 Spring JAR 需要 AspectJ,但当您将 Spring 作为依赖项包含时,构建项目不需要 AspectJ。如果您需要 AspectJ 功能,请将其包含在您的 POM 中。

    【讨论】:

    • 它在两个版本中都是可选的,但在 3.0.5 中我不必明确地将它包含在我的 pom 中,但在 3.1.2 中我必须这样做。为什么这样?这是一些错误还是一些故意的更改?
    • 你可能从其他组件获得了这个依赖,你能用 3.0.5 构建依赖树并检查哪个库给你带来它吗?
    • 如果你仔细阅读了这个问题,我已经做到了,很明显这种依赖来自春天。之间,我除了更改版本之外,没有对项目进行任何更改。
    • 我对 3.0.5.RELEASE 版本做了同样的事情,我在依赖树中没有 aspectj,所以请指定哪个库是 aspectj 的父库
    • 它的 spring 安全核心来自 aspectjrt
    【解决方案2】:

    我已经解决了这个问题。这是预期的行为,因为 spring security core 3.0.5 aspectjrt 不是可选的,但在 spring securoty core 3.1.2 中它们已将 aspectjrt 标记为可选。

    因此,如果您在代码中使用了一些 aspectjrt,则必须在 pom 中包含 aspectjrt 依赖项。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-02-21
      • 2012-11-26
      • 2017-09-24
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2021-03-08
      • 2012-12-09
      • 2017-04-19
      相关资源
      最近更新 更多