Eld*_*ell 1 grails groovy gant ivy
出于某种原因,'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
Run Code Online (Sandbox Code Playgroud)
所以,我继续并获得文件'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)"
Run Code Online (Sandbox Code Playgroud)
我将这一行更改为"[1.7,1.7.8]"并且依赖过程工作正常,现在战争部署没有任何问题,但我以前从未触及任何此类问题,我很担心.这是继续使用Grails依赖项的正确方法吗?
所有这一切都在安装JQuery UI插件后开始发生,即使在删除之后,问题仍然存在.
谢谢
看起来您在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'
}
Run Code Online (Sandbox Code Playgroud)
(注意:以上示例也排除了xml-apis,如果您使用的是Java 6,则可能需要这样做,以避免重复的类)
要跟踪此类冲突,您可以使用以下命令:
grails dependency-report
Run Code Online (Sandbox Code Playgroud)
在target/dependency-report /下生成报告