由于某些原因,“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/