2012-01-05 13 views
5
~/groovy 
% tree 
. 
├── lib 
│   ├── GTemplate.class 
│   └── GTemplate.groovy 
└── Simple.groovy 


class GTemplate { 
    static def toHtml() { 
    this.newInstance().toHtml1() 
    } 
    def toHtml1() { 
    "test" 
    } 
} 


import lib.* 
class Simple extends GTemplate { 
} 

błąd:jak po prostu importować groovy plik w innym porywające skryptu

% groovyc Simple.groovy org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Compilation incomplete: expected to find the class lib.GTemplate in /home/bhaarat/groovy/lib/GTemplate.groovy, but the file contains the classes: GTemplate 1 error

Odpowiedz

8

Wygląda na to są mylące Groovy z technik PHP-podobne.

Ponieważ jest bliższa Jawie, jeśli klasa istnieje w podfolderze, musi istnieć w pakiecie o tej samej nazwie. W przykładzie, można dodać tę linię do góry GTemplate.groovy i skompilować plik:

package lib 

Oznacza to jednak, że w pełni kwalifikowana nazwa dla GTemplate jest teraz faktycznie lib.GTemplate. To może nie być to, czego chcesz.

Ewentualnie, jeśli chcesz używać plików z podfolderu bez użycia pakietów, można usunąć komunikatu import z Simple.groovy i zamiast skompilować i uruchomić klasy tak:

groovyc -classpath $CLASSPATH:./lib/ Simple.groovy 
groovy -classpath $CLASSPATH:./lib/ Simple 

NOTE: If you don't have a CLASSPATH already set, you can simply use:

groovyc -classpath ./lib/ Simple.groovy 
groovy -classpath ./lib/ Simple 

Also, for windows machines, change $CLASSPATH: to %CLASSPATH%;

I zdecydowanie zalecamy zapoznanie się z pakietami i zrozumienie ich działania. Przyjrzyj się temu Wikipedia article on Java packages, aby uzyskać punkt wyjścia.