2010-06-27 44 views

回答

2

是的,你只需要创建一个配置文件/ rc文件。只需在〜/ .groovy/groovysh.profile中创建一个文件并将其导入到那里。您还需要确保您想要包含的任何其他类都是CLASSPATH的一部分。

例如:〜/ .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,这个例子只有在你的classpath中有commons-lang jar文件的情况下才会起作用

请参阅the Groovy Shell mo细节。

+0

酷,很好地工作。有没有办法为非交互式groovy脚本解释器(groovy)做同样的事情,还是它只适用于groovysh? – Steve 2010-06-29 00:45:17

0

Groovy向Object添加了一些方法,包括您期望在printWriters上使用的方法,如printlnprintf。他们隐式使用System.out。这实际上就是Groovy如果感觉像System.out是全局可用的。

如果您想默认导入一组类,那么可以在不指定完整软件包名称的情况下使用它们,Ted对groovysh.profile的评论适用。然而,如果你想要一个特定的对象,比如System.out,全局可用,所以它的方法可以在不引用对象的情况下调用,那么你可以向Object添加一些动态方法。例如,为了使默认的全局JDK记录仪的记录方法全局可用:

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... 

一旦这些方法应用到基础对象的metaClass,任何对象都可以调用info("message"),并把它记录下来,有效地使Logger.global与System.out相同。

相关问题