Groovy ShortTypeHandling类NotFoundException
我有一个使用groovy 2.2.1版的groovy应用程序。我的groovy应用程序以前运行良好,但最近开始抛出此异常:Groovy ShortTypeHandling类NotFoundException,groovy,Groovy,我有一个使用groovy 2.2.1版的groovy应用程序。我的groovy应用程序以前运行良好,但最近开始抛出此异常: at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at com
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at com.app.Main.main(Main.groovy:83)Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.runtime.typehandling.ShortTypeHandling
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
ShortTypeHandling类直到groovy 2.3.0才被引入。如何在运行2.2.1版的groovy应用程序中引用它?我可以通过在pom中将groovy-all-2.2.1.jar替换为groovy-all-2.3.0.jar来解决这个问题,但这并不是问题的根本原因 groovy-all-2.3.0.jar中引入了ShortTypeHandling,因此快速修复方法是用groovy-all-2.3.0.jar替换旧的groovy-all-x.x.x.jar。这解决了运行时ShortTypeHandling ClassNotFoundException问题,但通过在应用程序中引入新的groovy-all.jar依赖项,也产生了新的问题 真正的问题是如何通过maven调用groovy编译器。因为我引入了需要groovy 2.0的spock,所以我需要更新groovy eclipse编译器依赖项的maven条目。以下是使用groovy 2.x时更新的maven条目:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<compilerId>groovy-eclipse-compiler</compilerId>
<!-- Java version -->
<source>1.7</source>
<target>1.7</target>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-compiler</artifactId>
<version>2.8.0-01</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-batch</artifactId>
<!-- Groovy version -->
<version>2.1.8-01</version>
</dependency>
</dependencies>
</plugin>
org.apache.maven.plugins
maven编译器插件
3.1
groovy eclipse编译器
1.7
1.7
org.codehaus.groovy
groovy eclipse编译器
2.8.0-01
org.codehaus.groovy
groovy eclipse批处理
2.1.8-01
有了它,我可以让groovy完全依赖于我最初对工作/完全测试的应用程序的方式,如下所示:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<!-- If possible, its better if this matches 2.1.8 in the plugin definition -->
<!-- but 2.2.1 worked fine here and allowed me to keep the original pom definition -->
<version>2.2.1</version>
</dependency>
org.codehaus.groovy
groovy all
2.2.1
应用程序运行时不再引用ShortTypeHandling类,一切都像以前一样工作 我刚刚在eclipse中更新了groovy eclipse特性(为了尝试和修复由更新引起的间歇性保存问题),就遇到了这个问题。特别是在我的例子中,我的Groovy JUnit测试抛出了这个异常 根据上面的建议,我检查了我的Eclipse设置,它使用的是Groovy 2.3.4.xx,而我的Maven POM指定的是2.1.8.xx。我转到窗口->首选项->Groovy->编译器并单击“切换到2.1.8.xx…”,在出现提示时重新启动Eclipse,这就解决了问题。您必须添加(如果您使用的是Gradle)
将以下依赖项添加到pom.xml
<dependency>
<groupId>org.codehaus.groovy.maven.runtime</groupId>
<artifactId>gmaven-runtime-default</artifactId>
<version>1.0-rc-3</version>
<exclusions>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
</exclusion>
</exclusions>
</dependency>
org.codehaus.groovy.maven.runtime
gmaven运行时默认值
1.0-rc-3
org.codehaus.groovy
groovy all
Kuldeep SinghMatthew Wise的解决方案对我来说很有效,但除了重新启动eclipse之外,我还必须执行一个项目->清理,以便它使用新的编译器重新编译
(我会对他的答案发表评论,但stack overflow有一条愚蠢的规则,在你获得更多声誉之前,你不能发表评论)我通过在我的POM上添加此依赖项解决了这个问题:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-backports-compat23</artifactId>
<version>2.4.5</version>
</dependency>
org.codehaus.groovy
groovy-backports-compat23
2.4.5
然后,它就像一个魅力。我在我们的项目中遇到了类似的问题。令人惊讶的是,groovy版本并不是一个问题。
我正在使用比项目预期的gradle版本更旧的gradle版本构建项目。这就解决了错误 我刚开始使用使用groovy 2.3.0的Grails 2.4,当我将项目转移到使用Maven插件时,遇到了ShortTypeHandling ClassNotFoundException。这也是我第一次遇到这个问题,我还没有完全确定问题的根源。我怀疑groovy 2.3.0可能是通过您的一个插件依赖项进入的?您最近添加了新的还是升级的?您使用的maven插件版本是什么?我认为它必须是一个mvn依赖项,同时引入groovy-all-2.3.0 jar。我在整个pom上做了一个mvn依赖树(mvn dependency:tree-Dverbose),没有看到任何对groovy 2.3.0的引用。最后一件事是,当应用程序在Intellj(没有groovy 2.3.0依赖项)内部运行时,它工作得非常好。这个问题只有在我通过mvn命令行编译/打包/运行时才会出现。自应用程序停止运行以来,唯一添加的新插件是测试代码覆盖率插件cobertura maven plugin v2.6。您可能会发现Guillaume的发布公告很有帮助:。他们引入了一个兼容性jar来添加这个类。我为此奋斗了很长时间!你的帖子就是票。非常感谢。
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-backports-compat23</artifactId>
<version>2.4.5</version>
</dependency>