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

error:cómo importar un archivo simplemente maravilloso en otro script maravilloso

% 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

Respuesta

8

Parece que está confundiendo maravilloso con técnicas de PHP-similares.

Debido a que está más cerca de Java, si existe una clase dentro de una subcarpeta, debe existir dentro de un paquete con el mismo nombre. En el ejemplo, se podría añadir esta línea a la parte superior de GTemplate.groovy y volver a compilar el archivo:

package lib 

Sin embargo, esto significa que el nombre completo para GTemplate es ahora en realidad lib.GTemplate. Esto puede no ser lo que quieres.

Alternativamente, si desea utilizar los archivos de una subcarpeta sin utilizar paquetes, se puede quitar la instrucción import de Simple.groovy, y en lugar de compilar y ejecutar la clase de este 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 fuertemente recomendamos aprender sobre paquetes y comprender cómo funcionan. Mire esto Wikipedia article on Java packages para un punto de partida.