【问题标题】:Groovy older version in Grails warGrails 战争中的 Groovy 旧版本
【发布时间】:2011-07-07 12:11:30
【问题描述】:

出于某种原因,“grails war”在“WEB-INF/lib”中包含“groovy-1.6.9.jar”和“groovy-all-1.7.8.jar”文件。我正在使用 Grails 1.3.7,当我在 Tomcat 中部署这场战争时,我收到以下错误:

org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'pluginManager' 定义在 ServletContext 资源 [/WEB-INF/applicationContext.xml]: 调用 init 方法失败; 嵌套异常是 java.lang.NoSuchMethodError: org.codehaus.groovy.control.SourceUnit.getSource()Lorg/codehaus/groovy/control/io/ReaderSource;

我能够部署战争的唯一方法是删除旧的 groovy 文件并且应用程序运行良好。

我调试了依赖过程,我只能找到:

[NOT REQUIRED] org.codehaus.groovy#groovy;1.6.9!groovy.jar
...
:: evicted modules:
junit#junit;3.8.2 by [junit#junit;4.8.1] in [test]
          in org.codehaus.groovy#groovy;1.6.9 with latest-revision

所以,我继续并找到了包含以下内容的文件“org.codehaus.groovy.modules.http-builder/http-builder/ivy-0.5.0-RC2.xml”:

<dependency org="org.codehaus.groovy" name="groovy" rev="[1.5,1.6.99)"

我将此行更改为“[1.7,1.7.8)”,并且依赖过程运行良好,现在战争部署没有任何问题,但我以前从未接触过这些,我很担心。这是处理 Grails 依赖项的正确方法吗?

这一切都是在安装 JQuery UI 插件后开始发生的,即使在删除它之后,问题仍然存在。

谢谢

【问题讨论】:

    标签: grails groovy ivy gant


    【解决方案1】:

    看起来您在 BuildConfig.groovy 的依赖项块中有 http-builder。 http-builder 引入了 groovy 作为传递依赖。您需要排除它以避免与 Grails 附带的 groovy-all 冲突。

    compile("org.codehaus.groovy.modules.http-builder:http-builder:0.5.0") {
        excludes 'groovy', 'xml-apis'
    }
    

    (注意:上面的示例也排除了 xml-apis,如果您使用的是 Java 6,则可能需要这样做,以避免重复的类)

    要跟踪这样的冲突,您可以使用以下命令:

    grails dependency-report
    

    target/dependency-report/

    下生成报告

    【讨论】:

    • 我在 BuildConfig 中没有这种依赖关系。查看结果,我的应用程序似乎对 Apache HTTPClient 具有这种依赖性。无论如何,我已经按原样添加了您的示例,并且使用 http-builder:0.5.0 和 http-builder:0.5.0-RC2 创建了战争。我想我可能因为 STS 而把依赖关系搞砸了,但是你的回答让我找到了正确解决这个问题的正确方向。谢谢。
    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多