2010-06-27 51 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相同。

相關問題