Gangmax Blog

Groovy: unable to resolve class

今天在使用Groovy的时候发现一个问题,问题是这样的:

我有一个groovy文件,在它的开始有几个class的定义,最后是一段script,用于创建前面定义的class实例并执行。我在Netbeans里面运行该groovy文件一切正常。

然后我尝试把该文件中的几个class定义拿出来单独放在一个groovy文件里,原来的groovy文件只存放script那一段,这两个文件在同一目录下。这时问题出现了:运行的时候控制台报“unable to resolve class”错误,很明显是因为script groovy文件运行时,找不到class定义所在的那个groovy文件。我尝试在script groovy文件里面加入import,也没有任何效果。

在这里有人解释了原因。在这篇文章的启发下我找到一种解决方法:就是把自定义的class按照每个class一个groovy文件存放在同一个目录下,然后依次编译这些groovy文件,生成对应的java class文件。然后再运行script groovy文件,这时就没有错误了。

但是这种方式相当不方便,不知道有没有更好的解决办法。这也显示了groovy和python这类原生脚本语言的区别:groovy是构建在java之上的,所以底层必须先编译成class文件执行,而python可以是纯解释型的语言,只要能加载py文件即可,不需要编译过程。不知道groovy是否有类似python的”from … import …”功能。

1
2
3
4
5
6
7
8
9
10
package gflow

import gflow.WaitingStatus

class Process {
def wait = {
before, after ->
return new WaitingStatus([before_wait:before, after_wait:after])
}
}

Comments