Grails / Groovy / GGTS:运行应用程序上的模块版本冲突

Posted

技术标签:

【中文标题】Grails / Groovy / GGTS:运行应用程序上的模块版本冲突【英文标题】:Grails / Groovy / GGTS: Conflicting module versions on run-app 【发布时间】:2013-02-11 07:46:06 【问题描述】:

将 Grails 应用程序从 2.2.0 升级到 2.2.1 后,我在尝试通过 Debug as... 从 GGTS 调试 Grails 应用程序时不断收到以下错误... -> Grails 命令(运行应用程序):

Error starting Grails: nulljava.lang.ExceptionInInitializerError
at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:62)
at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32)
at groovy.lang.Closure.<init>(Closure.java:221)
at groovy.lang.Closure.<init>(Closure.java:238)
at groovy.lang.Closure$1.<init>(Closure.java:205)
at groovy.lang.Closure.<clinit>(Closure.java:205)
at org.codehaus.groovy.grails.cli.GrailsScriptRunner.<clinit>(GrailsScriptRunner.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1243)
at org.codehaus.groovy.grails.cli.support.GrailsStarter.rootLoader(GrailsStarter.java:234)
at org.codehaus.groovy.grails.cli.support.GrailsStarter.main(GrailsStarter.java:262)
Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.0.5 and you are trying to load version 2.0.7
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerExtensionModuleFromProperties(MetaClassRegistryImpl.java:186)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerExtensionModuleFromMetaInf(MetaClassRegistryImpl.java:174)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerClasspathModules(MetaClassRegistryImpl.java:156)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:111)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:73)
at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:33)
... 14 more

我正在使用 Groovy Compiler 2.0 Feature 2.7.1.xx-20120921-2000-e42RELEASE 和 Groovy/Grails Tool Suite 3.1.0.201210061306-RELEASE-e42 运行 GGTS 3.1.0.RELEASE。该项目已配置 Groovy 编译器级别 2.0。 Eclipse 首选项说“您当前使用的是 Groovy 编译器版本 2.0.4.xx-20120921-2000-e42RELEASE”。

有什么提示吗?

【问题讨论】:

我认为 grails clean 可能是合适的。清理后刷新依赖,再次尝试运行应用。 试过了,不幸的是没有帮助。 相关:***.com/questions/29116091/… 【参考方案1】:

我在 Ubuntu 机器上的 Grails 2.2.0 上遇到了这个问题,我通过以下步骤修复了它:

    打开 Eclipse 转到“运行方式”的“运行配置” 选择“环境”选项卡,然后选择“用指定环境替换原生环境”

这解决了我的问题..希望这有助于

【讨论】:

感谢您的提示 - 它在我的情况下有效。我认为这是因为我的 groovy 项目指向其他地方的较新 grails 安装,它使用的 groovy 版本与我的 STS 安装中的不同。【参考方案2】:

我遇到了同样的问题,我从 GGTS 中选择了 groovy-all 2.0.7,从我的 grails 项目中选择了 2.0.8。为了解决这个问题,我从 eclipse 项目中删除了“Groovy Dependencies”库。

右击项目 -> 属性 -> Java 构建路径 -> 库(选项卡) -> Groovy 依赖项 -> 删除

【讨论】:

对我和 GGTS 3.4.0 来说是:删除“项目 -> 属性 -> Java 构建路径 -> 库(选项卡)-> Groovy 库”。然后清理项目,清理 grails,刷新 grails 依赖项,一切都很好。 如果您使用 maven/gradle 托管依赖项,我认为这是首先要尝试的;它对我来说非常有效,它是任何 groovy 项目的通用修复(即使它不是 grails 项目) 它对我来说非常有效......不得不通过手动更新 pom 文件来忍受这个错误一段时间。我是多么愚蠢!【参考方案3】:

手动删除 run-app 运行配置,以便重新创建它。这在 2013 年 8 月 1 日被报告为错误。错误报告:https://issuetracker.springsource.com/browse/STS-3501

【讨论】:

起初看起来这对我有用(GGTS 3.4.0 w/ Grails 2.2.4)。但它在随后的测试应用程序执行中又回来了。【参考方案4】:

我删除了 GGTS 工作区中的 .metadata 并重新导入项目。它可以工作,我可以再次运行应用程序。

【讨论】:

【参考方案5】:

我遇到了同样的问题,我通过以下方式解决了它:

    对于您的项目:打开 Run As->Run Configurations 转到刷新标签 勾选完成后刷新资源运行

这对我有用。

【讨论】:

【参考方案6】:

我有同样的例外,当我试图在 Eclipse 中对我的 Spring 引导项目运行 JUnit 测试时,mvn 可以很好地执行它们。我没有使用 Gradle 或 Groovy。确实在调试时检查测试的类路径,显示了两个版本的 groovy.jar。 groovy.jar 的工作版本是从 Eclipse 工作区中的其他项目中挑选出来的。我能够通过在 project properties -> Maven 中删除 Resolve dependencies from Workspace projects 来修复它

【讨论】:

【参考方案7】:

我通过删除在运行配置中手动加载类路径的选项解决了这个问题。它使用了错误的 Grails 版本(2.5.0 而不是 2.5.1)。

基本上使用了错误的类路径。

也许这会让某人走上正确的道路:)

【讨论】:

【参考方案8】:

我没有解释为什么它不起作用,但我找到了解决方法。

我为同一个应用程序配置了另一个运行目标,但使用了-Dgrails.env=... 设置,我可以毫无问题地启动它。我只是复制了这个配置并删除了参数。这样,我基本上重新创建了之前一直失败的简单启动配置。

问题消失了。

【讨论】:

不管怎样,我最近从 2.2.0 更新到 2.2.1 的项目中遇到了这个错误。使用 GGTS 3.2.0 RELEASE 和 Groovy 编译器 2.0.7.xx-20130304-1200-e42,为项目设置 groovy 编译器级别 2.0。清洁/刷新部门似乎已经为我解决了这个问题。不知道为什么我今天开始看到它,我几天前升级了项目,但已经在 run-app 以及 war-deployed 中成功运行它,所以...... 耸耸肩【参考方案9】:

对我来说,从 grails 命令窗口编译就可以了

【讨论】:

【参考方案10】:

我在通过 eclipse 运行它时遇到了同样的问题,对我有用的是进行以下更改 转到项目属性 -> Groovy 编译器 -> 配置工作区设置。取消选中复选框“启用检查项目和工作区 groovy 编译器级别之间的不匹配”

【讨论】:

【参考方案11】:

当 Eclipse 停止运行我的项目并出现“groovy-all is loaded in version ... and you are trying to load version”错误时,另一个解决方案对我有用。

从 .classpath 中手动删除 groovy-all 行已修复。

<classpathentry kind="lib" path="Libraries/groovy-all-2.1.2.jar"/>

我找到了解决方案in this blog post。

【讨论】:

我通过 Eclipse 做了同样的事情。右键单击项目并选择构建路径-> 配置。单击库选项卡。单击 Groovy 运行时库,然后单击删除。似乎与此答案具有相同的效果,无需手动编辑.classpath 文件。【参考方案12】:

我遇到了同样的问题,我去了Project properties -&gt; Groovy Compiler -&gt;configure workspace settings,然后单击了与错误消息中两个版本之一相对应的“切换到”按钮。 我希望这会有所帮助

【讨论】:

【参考方案13】:

我知道这是一个 GGTS 问题,但 Google 把我带到了这里,即使几年后这似乎也是一个常见问题,所以我在这里发布了这个答案。希望它可以帮助同样登陆这里的其他 STS 用户。

我在使用 Spring Boot 版本 1.3.3.RELEASE 和 gradle 版本 2.14 时遇到了 Spring Tool Suite 的这个问题。对 groovy 2.4.6 和 groovy-all 2.4.6 有一些内部依赖,但我的 Eclipse 工作区 Groovy Libraries 是 2.4.7 版。从 Spring/Gradle 项目属性中删除 Groovy 库适用于运行这些项目,但对于工作区中的其他 Groovy 项目,您将陷入困境。如果在“项目中存在错误。仍然运行?”时单击“是”,它们将运行。如果您从属性构建路径中删除 Groovy 库,或者如果您将 Groovy 库放在属性构建路径中,它们将不会出现项目错误。

通过在工作区中的 Gradle 项目的 groovy 2.4.7 和 groovy-all 2.4.7 上的 build.gradle 中添加显式依赖项来解决

compile('org.codehaus.groovy:groovy:2.4.7')
compile('org.codehaus.groovy:groovy-all:2.4.7')

然后(关闭 Eclipse STS)然后从 .gradle 缓存中删除 2.4.6 文件夹

<path to>\.gradle\caches\modules-2\files-2.1\org.codehaus.groovy\groovy\2.4.6
<path to>\.gradle\caches\modules-2\files-2.1\org.codehaus.groovy\groovy-all\2.4.6

然后(打开 STS)然后右键单击 gradle project(s)>gradle>刷新 gradle project

现在工作区中的其他 Groovy 项目在没有 2.4.6 与 2.4.7 冲突的情况下运行。

【讨论】:

【参考方案14】:

使用 mvn denpendency:tree 检查你的依赖,可能存在版本冲突。

【讨论】:

【参考方案15】:

当我更改 grails 项目的名称时,它可以正常工作。

【讨论】:

【参考方案16】:

目前(使用 Eclipse 2020-06、4.16.0)以上解决方案都不再有效。

    打开 groovy 脚本的运行配置 从“类路径”选项卡中删除所有用户条目 按“恢复默认条目”

这应该将包含您指定的 Groovy 版本的默认类路径添加为用户条目。

【讨论】:

以上是关于Grails / Groovy / GGTS:运行应用程序上的模块版本冲突的主要内容,如果未能解决你的问题,请参考以下文章

如何让 IDEA 像 GGTS 3.5 一样直接调试 grails 2.3.x 应用程序?

带有 grails 的 Spring Security 核心插件

用groovy采集网页数据

在 grails 应用程序中在运行时修改 groovy 代码

如何在运行时获取 Grails Config.groovy 中的好东西?

intellij IDEA为啥运行时不编译grails或groovy了。