如何在另一个groovy脚本中简单地导入groovy文件

时间:2012-01-05 05:33:21

标签: groovy

~/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错误

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作为起点。