Tomcat:冲突的模块版本。模块[groovy-all在版本2.3.7中加载,您尝试加载版本2.4.3

问题描述 投票:6回答:3

我有一个jenkins构建服务器来构建我的grails项目。我最近更新了grails 2.5.0和groovy comiler 2.4.3

到现在为止还挺好。詹金斯正在再次建立战争。

但是当我在tomcat上部署战争时,我得到了错误:

log4j:ERROR Error initializing log4j: null
java.lang.ExceptionInInitializerError
        at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:61)
        at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32)
        at org.codehaus.groovy.grails.commons.AbstractGrailsApplication.<init>(AbstractGrailsApplication.java:45)
        at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.<init>(DefaultGrailsApplication.java:95)
        at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.<init>(DefaultGrailsApplication.java:91)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at java.lang.Class.newInstance(Class.java:379)
        at org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.createGrailsApplication(Log4jConfigListener.java:54)
        at org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:42)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.3.7 and you are trying to load version 2.4.3
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl$DefaultModuleListener.onModule(MetaClassRegistryImpl.java:509)
        at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanExtensionModuleFromProperties(ExtensionModuleScanner.java:77)
        at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanExtensionModuleFromMetaInf(ExtensionModuleScanner.java:71)
        at org.codehaus.groovy.runtime.m12n.ExtensionModuleScanner.scanClasspathModules(ExtensionModuleScanner.java:53)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:110)
        at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:71)
        at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:33)
        ... 25 more

有人可以告诉我我的配置错误以及在哪里查看?

tomcat grails groovy jenkins tomcat7
3个回答
6
投票

Gradle本身依赖于Groovy(对于您的Gradle版本,版本为2.3.7),Grails(版本2.4.3)也是如此。我的建议是升级到使用Groovy版本的Gradle版本,该版本接近Grails引入的版本。 Gradle 2.8 depends on Groovy 2.4.4,因此它足够接近版本2.4.3以排除任何API不兼容性。

但是,由于Gradle仍然会抱怨即使这个次要版本不匹配,您还需要在build.gradle文件中添加代码以明确解决版本冲突:

configurations.all {
    resolutionStrategy {
        force 'org.codehaus.groovy:groovy-all:2.4.4'
    }
}

1
投票

问题肯定是因为您正在为您的构建使用的gradle版本。虽然sschuberth的建议有效,但我发现在不同版本的gradle上有多个开发人员时,它不可扩展。您的构建脚本无法容纳它们中的每一个。容纳所有这些的唯一方法是排除所有版本:

configurations {
    all*.exclude group: 'org.codehaus.groovy', module: 'groovy-all'
}

这样,您的构建脚本将采用依赖管理的groovy版本,而不是您的gradle版本使用的版本。


0
投票

您需要将代码类路径'org.codehaus.groovy:groovy-all:2.4.3'添加到项目级build.gradle,错误将得到修复。

`buildscript {  
    dependencies {  
        classpath 'org.codehaus.groovy:groovy-all:2.4.3'  
    }  
 }`
© www.soinside.com 2019 - 2024. All rights reserved.