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

Jos*_*osh 5 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 {
}
Run Code Online (Sandbox Code Playgroud)

错误:

%groovyc Simple.groovy org.codehaus.groovy.control.MultipleCompilationErrorsException:startup failed:编译不完整:希望在/home/bhaarat/groovy/lib/GTemplate.groovy中找到类lib.GTemplate,但该文件包含以下类: GTemplate 1错误

Ove*_*ous 9

看起来你在使用类似PHP的技术混淆了Groovy.

因为它更接近Java,如果一个类存在于子文件夹中,它需要存在于同名的包中.在您的示例中,您可以将此行添加到顶部GTemplate.groovy并重新编译该文件:

package lib
Run Code Online (Sandbox Code Playgroud)

但是,这意味着现在实际上是GTemplate的完全限定名称lib.GTemplate.这可能不是你想要的.

或者,如果要在不使用包的情况下使用子文件夹中的文件,可以import从中删除语句Simple.groovy,然后编译并运行类,如下所示:

groovyc -classpath $CLASSPATH:./lib/ Simple.groovy
groovy -classpath $CLASSPATH:./lib/ Simple
Run Code Online (Sandbox Code Playgroud)

注意:如果您没有CLASSPATH设置,您可以简单地使用:

groovyc -classpath ./lib/ Simple.groovy
groovy -classpath ./lib/ Simple
Run Code Online (Sandbox Code Playgroud)

此外,对于Windows机器,更改$CLASSPATH:%CLASSPATH%;

强烈建议学习包并了解它们的工作原理.查看这篇关于Java包的维基百科文章的起点.