2009-05-28 21 views
12

Có cách nào để thực hiện một lớp Groovy bằng cách chỉ định gói có dấu chấm, như với java không?Thực hiện một lớp Groovy trong một gói từ dòng lệnh

Ví dụ: File ./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 

Tôi đã chờ đợi lệnh cuối cùng để làm việc. Tôi đã thử nhiều cách khác nhau để đặt classpath, không có kết quả.

Trả lời

14

Trước hết, gói là từ khóa dành riêng, do đó bạn không thể sử dụng từ khóa đó làm tên gói. Trước hết, bạn không thể làm điều đó trong Groovy, vì ký hiệu dấu chấm được sử dụng cho các lớp, không phải cho các kịch bản lệnh, do đó bạn cần một tệp lớp được biên dịch để sử dụng nó.

Tuy nhiên, bạn có thể thay thế lệnh groovy với java + classpath:

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

Bạn có thể thêm một bí danh cho nó 'g_java' ví dụ để làm cho nó ít tiết.

+0

Có vẻ như câu trả lời đúng, nhưng nó không hoạt động. Tôi đã sử dụng "my.package" làm ví dụ, bằng cách này - một điều tồi tệ mà tôi nhận ra. Dù sao, ngay cả với một tên gói chấp nhận được, và sau khi biên dịch với groovyc, nó không hoạt động. groovyc my/some/MyClass.groovy xuất CLASSPATH =. ls my/some/MyClass.class my/some/MyClass.class groovy my.some.MyClass Bị bắt: java.io.FileNotFoundException: /Users/olivier/my.some.MyClass (/ Users/olivier/my.some.MyClass) ? –

+0

Bạn nói đúng, tôi không biết làm thế nào tôi bỏ lỡ điều đó. Nếu bạn không ngại gian lận một chút, bạn có thể thay thế lệnh groovy bằng java + classpath: java -cp /usr/share/java/groovy/embeddable/groovy-all-1.6.3.jar :. my.some.MyClass Ví dụ: bạn có thể thêm bí danh vào bí danh 'g_java' để làm cho nó ít tiết hơn. –

+0

Cảm ơn. Nó hoạt động. Vì vậy, câu trả lời cho câu hỏi ban đầu của tôi là: Không, nó không hoạt động theo cách này trong Groovy. Bạn phải sử dụng javac và java. –

Các vấn đề liên quan