是否可以自动将用户类预加载到groovy解释器中?

是否可以自动将用户类预加载到groovy解释器中?,groovy,Groovy,有没有办法在groovy解释器中自动加载用户类,自动加载System.out的方式(这样您就不必导入System.out来使用println)?我希望能够编写使用自定义类的脚本,并在groovy解释器中运行脚本,而不必一直导入所有类 是的,您只需要创建一个profile/rc文件。只需在~/.groovy/groovysh.profile上创建一个文件,并将导入内容放在那里。您还需要确保要包含的任何其他类都是类路径的一部分 例如:~/.groovy/groovysh.profile: impor

有没有办法在groovy解释器中自动加载用户类,自动加载System.out的方式(这样您就不必导入System.out来使用println)?我希望能够编写使用自定义类的脚本,并在groovy解释器中运行脚本,而不必一直导入所有类

是的,您只需要创建一个profile/rc文件。只需在~/.groovy/groovysh.profile上创建一个文件,并将导入内容放在那里。您还需要确保要包含的任何其他类都是类路径的一部分

例如:~/.groovy/groovysh.profile:

import org.apache.commons.lang.StringUtils

println "in groovysh.profile"
然后运行groovysh并使用StringUtils中的方法:

% groovysh
in groovysh.profile
Groovy Shell (1.7.3, JVM: 1.6.0_20)
Type 'help' or '\h' for help.
---------------------------------------------------------------------------------------------------------------------------------
groovy:000> StringUtils.isWhitespace("    ")
===> true
groovy:000> 
您可以看到导入已经就绪(并且它还打印出了我在概要文件中的println)。只有当您的类路径中有commons lang jar文件时,这个示例才有效


有关更多详细信息,请参见第页。

Groovy向对象添加了一些方法,包括PrintWriter上所需的
println
printf
等方法。它们隐式使用System.out。如果感觉System.out是全局可用的,Groovy实际上就是这样做的

如果您希望在默认情况下导入一组类,这样就可以在不指定完整包名的情况下使用它们,那么Ted关于groovysh.profile的评论将适用

但是,如果您希望某个特定对象(如System.out)全局可用,以便可以在不引用该对象的情况下调用其方法,则可以向该对象添加一些动态方法。例如,要使默认全局JDK logger的日志记录方法全局可用,请执行以下操作:

Object.metaClass.info = { String message ->
    java.util.logging.Logger.global.info(message)
}
Object.metaClass.warning = { String message ->
    java.util.logging.Logger.global.warning(message)
}
Object.metaClass.severe = { String message ->
    java.util.logging.Logger.global.severe(message)
}
etc...

一旦这些方法应用于基本对象元类,任何对象都可以调用
info(“message”)
,并将其记录下来,从而有效地使Logger.global以与System.out相同的方式可用。

很酷,这很好。对于非交互式groovy脚本解释器(groovy),有没有办法做到这一点还是只对groovysh有效?