我有一个groovy应用程序,使用groovy版本2.2.1.我的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.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)
Run Code Online (Sandbox Code Playgroud)
ShortTypeHandling类甚至在groovy 2.3.0之前都没有引入.如何在运行2.2.1版本的groovy应用程序中引用它?我可以通过在我的pom中用groovy-all-2.3.0.jar替换groovy-all-2.2.1.jar来解决这个问题,但这不会导致问题.
Gre*_*egG 21
ShortTypeHandling是在groovy-all-2.3.0.jar中引入的,因此快速修复是用groovy-all-2.3.0.jar替换旧的groovy-all-xxxjar.这解决了运行时ShorTypeHandling ClassNotFoundException,但也通过在应用程序中引入新的groovy-all.jar依赖项来创建新问题.
真正的问题是如何通过maven调用groovy编译器.因为我介绍了需要groovy 2.0的spock,所以我需要更新groovy-eclipse-compiler依赖项的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>
Run Code Online (Sandbox Code Playgroud)
有了这个,我可以保留我的groovy-all依赖,就像我最初用于工作/经过全面测试的应用程序一样:
<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>
Run Code Online (Sandbox Code Playgroud)
应用程序运行时不再引用ShortTypeHandling类,一切都像以前一样工作.
Xel*_*ian 19
你必须添加(如果你使用Gradle)
compile 'org.codehaus.groovy:groovy-backports-compat23:2.4.5'
Run Code Online (Sandbox Code Playgroud)
Mat*_*ise 13
我刚刚更新了Eclipse中的groovy-eclipse功能后(为了尝试修复由https://jira.codehaus.org/browse/GRECLIPSE-1519引起的间歇性保存问题).特别是在我的情况下,我的Groovy JUnit测试抛出了这个异常.
根据上面的建议,我检查了我的Eclipse设置,它使用的是Groovy 2.3.4.xx,而我的Maven POM指定了2.1.8.xx. 我去窗口 - >首选项 - > Groovy中 - >编译器,并点击"切换到2.1.8.xx ......".重新启动Eclipse提示时,这个固定它.
我已经通过在我的POM上添加这个依赖项解决了这个问题:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-backports-compat23</artifactId>
<version>2.4.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后,它就像一个魅力.