2012-01-05 20 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 { 
} 

Errore:come importare semplicemente un file Groovy in un altro script Groovy

% 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

risposta

8

Sembra che tu stai confondendo Groovy con tecniche PHP-like.

Poiché è più vicino a Java, se una classe esiste all'interno di una sottocartella, deve esistere all'interno di un pacchetto con lo stesso nome. Nel tuo esempio, è possibile aggiungere questa riga in cima GTemplate.groovy e ricompilare il file:

package lib 

Tuttavia, questo significa che il nome completo per GTemplate è ora effettivamente lib.GTemplate. Questo potrebbe non essere quello che vuoi.

In alternativa, se si desidera utilizzare i file da una sottocartella senza l'utilizzo di pacchetti, è possibile rimuovere l'istruzione import da Simple.groovy, e invece compilare ed eseguire la classe in questo modo:

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 fortemente consiglia di conoscere i pacchetti e capire come funzionano. Guarda questo Wikipedia article on Java packages per un punto di partenza.