2012-09-13 7 views
0

Ayant:withDefault ne peut pas trouver la classe

class Task { 
    Integer code 
    String name 
} 

def classDefinition = """ 
      package untitled24 

      class TasksCommand { 
       List tasks = [].withDefault { new Task() } 
      } 
      TasksCommand 
     """ 

def shell = new GroovyShell(this.class.classLoader) 
Class<?> definedClass = shell.evaluate(classDefinition) 

résultat d'exécution est:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
Script1.groovy: 5: unable to resolve class Task 
@ line 5, column 47. 
    List tasks = [].withDefault { new Task() 
          ^

Toute idée? (Version groovy est 1.8.8)

Répondre

0

C'est parce que la définition de votre tâche n'est pas dans un paquet, de sorte que le code à l'intérieur untitled24 ne peut pas localiser la classe ...

Si vous modifiez le dessus:

package woo 

class Task { 
    Integer code 
    String name 
} 

def classDefinition = """package untitled24 
         | 
         |class TasksCommand { 
         | List tasks = [].withDefault { new woo.Task() } 
         |} 
         |TasksCommand""".stripMargin() 

def shell = new GroovyShell(this.class.classLoader) 
Class<?> definedClass = shell.evaluate(classDefinition) 

il devrait fonctionner ... (ajouté stripMargin pour la lisibilité)

Questions connexes