1

出于某种原因,“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:在 ServletContext 资源 [/WEB-INF/applicationContext.xml] 中定义名称为“pluginManager”的 bean 创建错误:调用 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 插件之后开始发生的,即使在删除它之后,问题仍然存在。

谢谢

4

1 回答 1

9

看起来您在 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/下生成报告

于 2011-03-02T21:05:19.507 回答