2011-03-21 5 views
2

Je suis intéressé par l'utilisation d'une certaine bibliothèque (Gremlin, le langage de traversée de graphe) dans mon projet Grails. J'ai jeté le .jars nécessaire dans [grailsproject]/lib. Mais quand je fais grails run-app il me donne une erreur de compilation re: une classe « Gremlin », qui fait partie du pot (je confirme qu'il est inclus dans le bocal en exécutant tar tf <jarfile>.jar, et il montre la classe Gremlin):Grailles ne chargeant pas de classes dans le fichier .jar

[groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, 
...unexpected token: Gremlin @ line 45, column 2. 
    [groovyc]  Gremlin.load() 
    [groovyc] ^

Existe-t-il un moyen de "rafraîchir" Grails pour s'assurer qu'il charge les nouveaux fichiers jar? J'utilise exactement le même pot dans une application de test groovy indépendante avec les mêmes instructions d'importation, et là je suis capable d'utiliser la classe Gremlin et ça marche bien. Mon système $ CLASSPATH n'inclut aucun fichier jar que je n'ai pas ajouté dans [grailsproject]/lib.

Des idées?

Merci!

Mise à jour: Voici la section pertinente du code:

package com.mycompany.myproject 

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH 
import com.orientechnologies.common.collection.* 
import com.orientechnologies.common.* 
import com.orientechnologies.orient.core.* 
import com.tinkerpop.blueprints.* 
import com.tinkerpop.blueprints.pgm.* 
import com.tinkerpop.blueprints.pgm.impls.orientdb.* 
import com.tinkerpop.gremlin.pipes.* 
import com.tinkerpop.gremlin.Gremlin 
import com.tinkerpop.gremlin.* 


class GraphDbService { 

    boolean transactional = true  

    Gremlin.load() 

    ... 
+0

Pouvez-vous poster la source de la classe qui provoque les erreurs? Ou juste la section pertinente? Je suppose que vous "importer com.tinkerpop.gremlin.Gremlin'? –

+0

J'ai ajouté le code, et oui, j'importe aussi Gremlin ainsi que gremlin. * Pour une bonne mesure – mindthief

+0

quelle version de grails êtes-vous? –

Répondre

3

Je pense que vous devez mettre Gremlin.load() à l'intérieur d'une méthode, pas seulement dans la section définition de votre classe de service ...

c.-à-d.:

class GraphDbService { 
    boolean transactional = true  

    def someServiceMethod() { 
    Gremlin.load() 
    } 

    ... 

Ou, de préférence, vous devriez être en mesure de le mettre dans la méthode init() de votre fichier BootStrap.groovy, car il n'a besoin que d'appeler une fois, afin qu'il puisse décorer toutes les classes requises.

+0

Merci Tim! +1 pour le pointeur sur le mettre dans le fichier BootStrap.groovy, et c'est la solution que j'ai implémentée. – mindthief

0

Je pense que vous devriez être en mesure d'ajouter ce qui suit à la grails-app/conf/BuildConfig.groovy

grails.project.dependency.resolution = { 
    //...bunch of stuff 
    dependencies { 
     // other resolved dependencies here 

     compile files('lib/gremlim.jar') 
    } 
} 
+0

Hmm, cela n'a pas semblé fonctionner .. il sort le message 'AVERTISSEMENT: la méthode de configuration [runtime] dans grails-app/conf/BuildConfig.groovy n'existe pas. Ignorer .. 'quand je cours' grails run-app' et ensuite donne la même erreur de compilation comme avant. – mindthief

+1

BuildConfig n'existe pas! ... en regardant votre mise à jour vous devrez juste ajouter static {} autour de la charge Gremlim .. vous l'avez actuellement défini au milieu d'une classe –

+0

Bien sûr, c'était tout. Et le static {} a fonctionné, merci! – mindthief

0

Ne

grails compile --refresh-dependencies 
Questions connexes