~/groovy
% tree
.
├── lib
│ ├── GTemplate.class
│ └── GTemplate.groovy
└── Simple.groovy
class GTemplate {
static def toHtml() {
this.newInstance().toHtml1()
}
def toHtml1() {
"test"
}
}
import lib.*
class Simple extends GTemplate {
}
错误:
%groovyc Simple.groovy org.codehaus.groovy.control.MultipleCompilationErrorsException: 启动失败:编译不完整:期望找到该类 lib.GTemplate在/home/bhaarat/groovy/lib/GTemplate.groovy,但是 文件包含类:GTemplate 1错误
答案 0 :(得分:9)
看起来你正在将Groovy与类似PHP的技术混淆。
因为它更接近Java,如果一个类存在于子文件夹中,它需要存在于同名的包中。在您的示例中,您可以将此行添加到GTemplate.groovy
的顶部并重新编译文件:
package lib
但是,这意味着GTemplate的完全限定名称现在实际为lib.GTemplate
。这可能不是你想要的。
或者,如果要在不使用包的情况下使用子文件夹中的文件,可以从import
中删除Simple.groovy
语句,然后编译并运行类,如下所示:
groovyc -classpath $CLASSPATH:./lib/ Simple.groovy
groovy -classpath $CLASSPATH:./lib/ Simple
注意:如果您没有设置
CLASSPATH
,则只需使用:groovyc -classpath ./lib/ Simple.groovy groovy -classpath ./lib/ Simple
此外,对于Windows计算机,将
$CLASSPATH:
更改为%CLASSPATH%;
我强烈建议了解包并了解它们的工作原理。请看这个Wikipedia article on Java packages作为起点。