2009-05-28 4 views
12

java와 같이 패키지를 점으로 지정하여 Groovy 클래스를 실행하는 방법이 있습니까?패키지에서 명령 행에서 Groovy 클래스 실행

예 : ./my/package/MyClass.groovy 파일 :

package my.package 

class MyClass { 
    static void main(String[] args) { 
    println "ok" 
    } 
} 
내가 마지막 명령이 작동 할 것으로 예상했다
 
> cd my/package 
my/package> groovy MyClass 
ok 
> cd ../.. 
> groovy my/package/MyClass.groovy 
ok 
> groovy my/package/MyClass 
ok 
> groovy my.package.MyClass 
Caught: java.io.FileNotFoundException: my.package.MyClass 

. 클래스 패스를 설정하는 다양한 방법을 시도했지만 아무 소용이 없습니다.

답변

14

우선 패키지은 예약어이므로 패키지 이름으로 사용할 수 없습니다.

두 번째로, 점 표기법은 스크립트가 아닌 클래스에 사용되므로 Groovy에서 사용할 수 없습니다. 따라서 사용하려면 컴파일 된 클래스 파일이 필요합니다.

그래도, 당신은 자바 + 클래스 패스로 끝내 명령을 대체 할 수

java -cp /usr/share/java/groovy/embeddable/groovy-all-1.6.3.jar:. my.some.MyClass

당신은 덜 상세하게 예를 들어 여기에 'g_java를'별칭을 추가 할 수 있습니다.

+0

옳은 대답 인 것처럼 들리지만 작동하지 않습니다. 나는 "my.package"를 예제로 사용했는데, 그건 잘못된 것입니다. 어쨌든, 허용되는 패키지 이름을 사용하고 groovyc로 컴파일 한 후에도 작동하지 않습니다. groovyc my/some/MyClass.groovy 내보내기 CLASSPATH =. LS 내/일부/MyClass.class 내를/어떤/MyClass.class 끝내 가 겁에 질린 my.some.MyClass : java.io.FileNotFoundException : /Users/olivier/my.some.MyClass (/ 사용자/올리비에/my.some.MyClass) ? –

+0

네 말이 맞아, 어떻게 그리워했는지 모르겠다. 조금 부정 행위를해도 괜찮 으면 groovy 명령을 java + classpath : java -cp /usr/share/java/groovy/embeddable/groovy-all-1.6.3.jar :로 바꿀 수 있습니다. my.some.MyClass 예를 들어 'g_java'에 별명을 추가하여 덜 자세하게 만들 수 있습니다. –

+0

감사합니다. 그것은 작동합니다. 그래서, 원래의 질문에 대한 대답은 : 아니오, Groovy에서는 이런 식으로 작동하지 않습니다. javac와 java를 사용해야합니다. –