今天在使用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 | package gflow |