Grails战中的Groovy旧版本

时间:2011-03-02 18:36:50

标签: grails groovy ivy gant

出于某种原因,'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的/常规/控制/ 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插件后开始发生,即使在删除之后,问题仍然存在。

由于

1 个答案:

答案 0 :(得分:9)

看起来您在BuildConfig.groovy中的依赖项块中有http-builder。 http-builder将groovy作为传递依赖。您需要将其排除以避免与Grails一起提供的groovy冲突。

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 /

下生成报告