我们正在使用Hudson来持续构建一些项目,这些项目使用groovy脚本(Execute Groovy系统脚本)作为后期构建操作在数据库中执行sql文件。脚本(使用枚举)在大多数情况下都能正常工作,但随机抛出跟随错误:
FATAL: java/lang$Enum
java.lang.NoClassDefFoundError: java/lang$Enum
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethods(Unknown Source)
at org.codehaus.groovy.reflection.CachedClass$3$1.run(CachedClass.java:84)
at java.security.AccessController.doPrivileged(Native Method)
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:81)
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:79)
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46)
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33)
at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:250)
at groovy.lang.MetaClassImpl.populateMethods(MetaClassImpl.java:334)
at groovy.lang.MetaClassImpl.fillMethodIndex(MetaClassImpl.java:284)
at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2904)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:166)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:182)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:227)
at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:751)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:59)
...
...
一旦出现此错误,所有后续构建都会失败并出现相同的错误。我们通过定义JAVA_HOME环境变量(以某种方式被删除)修复了一次。它工作了几天才重新出现。这次,我们在Hudson配置中定义了JAVA_HOME,并且在几天之后问题重新出现时它暂时起作用。我们没有在hudson配置中设置Groovy路径,因为我们没有单独安装groovy。版本详情如下:
我们可以尝试哪些其他选项来解决问题?
PS:我们已经尝试过Jenkins,但是由于Jenkins中的Subversion插件中的一个问题/特性而退回到Hudson,当工作空间被锁定时,它会检查存储库,这是我们无法负担的。