2010-06-27 5 views
1

Groovy 인터프리터에서 System.out이 자동으로로드되는 방식으로 사용자 클래스를 자동으로로드하는 방법이 있습니까? (그래서 println을 사용하기 위해 System.out을 가져올 필요가 없습니다)? 모든 클래스를 항상 사용하지 않고도 사용자 정의 클래스를 사용하는 스크립트를 작성하고 Groovy 인터프리터에서 스크립트를 실행할 수 있기를 원합니다.자동으로 사용자 클래스를 Groovy 인터프리터에 미리로드 할 수 있습니까?

답변

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> 

당신은 수입이 제자리에 있는지 볼 수 있습니다 (그리고 이 예제는 클래스 패스에 commons-lang jar 파일이있는 경우에만 작동합니다.

mo에 대한 페이지를 참조하십시오. 세부 사항.

+0

멋지다. 멋지게 작동한다. 비대화 형 그루비 스크립트 인터프리터 (groovy)에 대해 동일한 작업을 수행 할 수있는 방법이 있습니까? 아니면 groovysh에서만 작동합니까? – Steve

0

Groovy는 printWriter에서 기대할 수있는 printlnprintf과 같은 메소드를 포함하여 Object에 몇 가지 메소드를 추가합니다. 그들은 암묵적으로 System.out을 사용합니다. System.out이 전 세계적으로 사용 가능하다고 느끼면 실제로 그루비가 만들어집니다.

전체 패키지 이름을 지정하지 않고도 사용할 수 있도록 기본적으로 클래스 세트를 가져 오려면 groovysh.profile에 대한 Ted의 주석이 적용됩니다.

그러나 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... 

을하는 방법이 기본 개체 메타 클래스에 적용되면, 모든 객체는 info("message")를 호출하고 효과적으로 Logger.global을, 기록 할 수 있습니다 System.out과 동일한 방법으로 사용할 수 있습니다.

관련 문제