我正在从Groovy 1.76迁移到groovy 2.1并且在运行一些Java代码时出现问题。
我的classpath上有java 7和Groovy 2.1。 Gradle正在运行,我的项目可以运行所有单元测试并像以前一样成功执行。
但是,我有一个java类加载其中一个groovy类并执行它(该类可以在常规gradle / groovy单元测试中正常执行)当我尝试在新环境中运行它时它失败了以下例外:
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/groovy/transform/powerassert/ValueRecorder
at com.covestor.glossary.meta.Entity$_Rel__clinit__closure3_closure4.doCall(Entity.groovy:500)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
我在其他问题/讨论中已经看到从Groovy 1.7中删除了一些类,所以一般的建议似乎是确保这些类是针对更高版本的groovy重新构建的 - 但我的类已经在构建对于更高版本(我的脚本启动java代码实际上首先调用gradle clean build
以确保所有groovy类都已正确编译)。还有一些jar依赖项,但它们都不是从Groovy源代码构建的(所有java jar)。
有谁可以提出问题可能是什么?我看不出任何代码仍然是针对1.7构建的
答案 0 :(得分:2)
ValueRecorder类在内部用于在Groovy中实现the power assert feature。不幸的是,这些类已被移动到另一个包from 1.7 to 1.8。
您的错误意味着仍然有一些1.7编译的Groovy代码。这就是NoClassDefFoundError的原因。
答案 1 :(得分:0)
我在升级时遇到了类似的问题,我从未创建过新的GROOVY_HOME
来指向新版本的groovy ...你是否这样做并且还在你的路径中添加了$GROOVY_HOME/bin
?