Tomcat:模块版本冲突。模块 [groovy-all 在 2.3.7 版本中加载,您正在尝试加载 2.4.3 版本
Posted
技术标签:
【中文标题】Tomcat:模块版本冲突。模块 [groovy-all 在 2.3.7 版本中加载,您正在尝试加载 2.4.3 版本【英文标题】:Tomcat: Conflicting module versions. Module [groovy-all is loaded in version 2.3.7 and you are trying to load version 2.4.3 【发布时间】:2015-09-14 22:39:59 【问题描述】:我有一个构建我的 grails 项目的 jenkins 构建服务器。我最近更新到 grails 2.5.0 和 groovy 编译器 2.4.3
到目前为止一切顺利。 jenkins 又开始发动战争了。
但是当我在我的 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
谁能告诉我我的配置有误以及在哪里查看?
【问题讨论】:
看起来你在类路径上有 2 个版本的 groovy。你在建造战争之前尝试过清洁吗?或者您是否在 tomcat 实例的其他地方添加了 groovy?例如在 lib 文件夹中? 是的。我做了清理,编译,战争。我刚刚安装了tomcat。在这里粘贴我的类路径会有所帮助吗? 【参考方案1】:Gradle 本身依赖于 Groovy(在 2.3.7 版上对应您的 Gradle 版本),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'
【讨论】:
【参考方案2】:这个问题肯定是因为您用于构建的 gradle 版本。虽然 sschuberth 的建议有效,但我发现它无法扩展,因为您在不同版本的 gradle 上有多个开发人员。您的构建脚本将无法容纳其中的每一个。容纳它们的唯一方法是排除所有版本:
configurations
all*.exclude group: 'org.codehaus.groovy', module: 'groovy-all'
这样,您的构建脚本将采用您的依赖管理版本的 groovy,而不是您使用的 gradle 版本。
【讨论】:
【参考方案3】:您需要将代码类路径 'org.codehaus.groovy:groovy-all:2.4.3' 添加到项目级 build.gradle 中,错误将得到修复。
`buildscript
dependencies
classpath 'org.codehaus.groovy:groovy-all:2.4.3'
`
【讨论】:
以上是关于Tomcat:模块版本冲突。模块 [groovy-all 在 2.3.7 版本中加载,您正在尝试加载 2.4.3 版本的主要内容,如果未能解决你的问题,请参考以下文章
Gradle groovy 和 RestAssured groovy 之间的版本冲突
当***模块及其子模块之一作为单独版本单独导入时,如何解决冲突的 go 模块依赖关系?
Android Gradle 插件Android 依赖管理 ⑤ ( Gradle 依赖优化 | 命令行查看依赖模块 | 依赖冲突问题 | 依赖传递冲突 | 分库冲突 | 依赖分组不同导致冲突 )