grails - Grails war 中的Groovy旧版本

标签 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中部署此 war 时,收到以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.codehaus.groovy.control.SourceUnit.getSource()Lorg/codehaus/groovy/control/io/ReaderSource;



我能够部署 war 的唯一方法是删除旧的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)”,并且依赖进程运行正常,现在部署 war 没有任何问题,但是我从未接触过任何此类问题,我对此感到担心。这是进行Grails依赖关系的正确方法吗?

在安装了JQuery UI插件后,所有这些事情开始发生,即使删除了它,问题仍然存在。

谢谢

最佳答案

看起来您在BuildConfig.groovy的依赖项块中有http-builder。 http-builder将groovy作为可传递的依赖项。您需要将其排除在外,以免与groovy冲突(所有Grails都随附了该冲突)。

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

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

要跟踪这样的冲突,可以使用以下命令:
grails dependency-report

在目标/依赖关系报告/下生成报告

关于grails - Grails war 中的Groovy旧版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5171820/

相关文章:

spring - 如何在 groovy 中定义指定 Sql 类型的 SqlParameter 映射?

java - Ivy 加载不必要的依赖项?

java - 在groovy Controller 代码中过滤掉SQL语句中的数字并在jsp View 中仅显示字母字符

mongodb - Mongodb:如何按对象列表分组

grails - Spring Security URL 映射 Grails

java - 进行 REST 调用(POST、GET)的 Gradle 脚本

java - 获取两天之间的差值(减法)

groovy - 替换方法时,metaClass .'static' 不起作用

gradle - Gradle/Ivy 如何读取充当 Maven 镜像的 Nexus 存储库?

Java Ant,从 repo 中获取 Ivy 时出错