一個面向?qū)ο蟮恼Z言往往都是通過package把對象組織起來的,但是很奇怪居然沒有找到groovy的package方面的資料,難道groovy不支持?那么我們怎么用groovy來設計負責一點的程序呢?還是做試驗試試吧:
Dog.groovy:
嗯,一只會說一句話的狗,還回吠哦。
編譯一下看看有沒有錯: groovyc Dog.groovy
嗯,沒有錯,而且在當前目錄下生成了一個com目錄,其中有Dog.class文件
再建一個類來引用這個類 trainDog.groovy:
Dog.groovy:
1
package com
2
class Dog
{
3
public def name;
4
def bark ()
{
5
println("barking")
6
}
7
def say ()
{
8
println("My name is "+name);
9
}
10
}
11

2



3

4



5

6

7



8

9

10

11

嗯,一只會說一句話的狗,還回吠哦。
編譯一下看看有沒有錯: groovyc Dog.groovy
嗯,沒有錯,而且在當前目錄下生成了一個com目錄,其中有Dog.class文件
再建一個類來引用這個類 trainDog.groovy:
1
dog = new com.Dog(name:"Doggie");
2
dog.bark();
3
dog.say();
4

2

3

4

運行……失敗了:
Caught: General error during class generation: No such class: com.Dog in constructor call for class: trainDog. At [1:7] D:\groovy\mygroovy\com\trainDog.groovy
一番努力之后,始終無法讓 trainDog.groovy運行起來,但是反編譯這兩個groovy生成的class文件看起來又很正確。算了,用java來運行它吧(還好一開始就配置了editplus下面的調(diào)試環(huán)境,下面的命令由editplus自動生成,不用自己敲了)
D:\jdk1.5.0\bin\java.exe -classpath .;d:\groovy\groovy-1.0-jsr-01.jar;d:\groovy\lib\asm-1.5.2.jar trainDog
果然不錯:
---------- java ----------
barking
My name is Doggie
Normal Termination
輸出完成(耗時 0 秒)。
看來groovy雖然可以直接運行,卻不能直接相互引用。進行復雜應用的時候還是要先編譯好以便他們可以相互引用類文件。此外groovy編譯器會自動為包創(chuàng)建對應的目錄,所以所有的groovy不管分散到多少包里面都要在同一個目錄(所有包的上一層)下面編譯。