~/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 {
}
Error:
% groovyc Simple.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException:
启动失败:编译不完整:期望找到该类
lib.GTemplate 在 /home/bhaarat/groovy/lib/GTemplate.groovy 中,但是
文件包含类:GTemplate 1 错误
看来您将 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:
to %CLASSPATH%;
I strongly建议学习包并了解它们的工作原理。看这个关于 Java 包的维基百科文章为起点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)