2010-10-30 5 views
2

J'ai une application Grails relativement ancienne qui utilise ant pour construire l'application. Dans le serveur de test, il construit sans aucun problème, mais lorsque je tente de l'exécuter sur mon PC, je reçois une erreur cohérente:erreur componentdef avec ant

Caused by: jar:file:/C:/ant/apache-ant-1.8.0/lib/ant.jar!/org/apache/tools/ant/antlib.xml:37: Problem: failed to create task or type componentdef 
    Cause: The name is undefined. 
    Action: Check the spelling. 
    Action: Check that any custom tasks/types have been declared. 
    Action: Check that any <presetdef>/<macrodef> declarations have taken place. 
    at org.apache.tools.ant.UnknownElement.getNotFoundException(UnknownElement.java:484) 
     at org.apache.tools.ant.UnknownElement.makeObject(UnknownElement.java:416) 
     at org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:160) 
     at org.apache.tools.ant.taskdefs.Antlib.execute(Antlib.java:146) 
     at org.apache.tools.ant.taskdefs.Definer.loadAntlib(Definer.java:432) 
     ... 63 more 

J'ai trouvé que l'erreur se produit dans la partie suivante de la construction:

<macrodef name="grails"> 
    <attribute name="script"/> 
    <attribute name="args" default="" /> 
    <sequential> 
     <grailsTask script="@{script}" args="@{args}" classpathref="grails.classpath"> 
      <compileClasspath refid="compile.classpath"/> 
      <testClasspath refid="test.classpath"/> 
      <runtimeClasspath refid="app.classpath"/> 
     </grailsTask> 
    </sequential> 
</macrodef> 

Si je commente, il n'y a plus d'erreurs.

Pour refererence plus loin, voici toute la décharge d'erreur:

G:\chp\src\hewittportlet\build.xml:131: The following error occurred while executing this line: 
G:\chp\src\hewittportlet\build.xml:53: Unable to start Grails: java.lang.reflect.InvocationTargetExc 
eption 
     at grails.ant.GrailsTask.runGrails(GrailsTask.java:124) 
     at grails.ant.GrailsTask.execute(GrailsTask.java:78) 
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.Task.perform(Task.java:348) 
     at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) 
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.Task.perform(Task.java:348) 
     at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398) 
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.Task.perform(Task.java:348) 
     at org.apache.tools.ant.Target.execute(Target.java:390) 
     at org.apache.tools.ant.Target.performTasks(Target.java:411) 
     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1360) 
     at org.apache.tools.ant.Project.executeTarget(Project.java:1329) 
     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
     at org.apache.tools.ant.Project.executeTargets(Project.java:1212) 
     at org.apache.tools.ant.Main.runBuild(Main.java:801) 
     at org.apache.tools.ant.Main.startAnt(Main.java:218) 
     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
     at org.codehaus.groovy.grails.cli.support.GrailsBuildHelper.execute(GrailsBuildHelper.java:9 
4) 
     at grails.ant.GrailsTask.runGrails(GrailsTask.java:113) 
     ... 31 more 
Caused by: java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.codehaus.groovy.grails.cli.support.GrailsBuildHelper.execute(GrailsBuildHelper.java:8 
8) 
     ... 32 more 
Caused by: The following error occurred while executing this line: 
jar:file:/C:/ant/apache-ant-1.8.0/lib/ant.jar!/org/apache/tools/ant/antlib.xml:37: Problem: failed t 
o create task or type componentdef 
Cause: The name is undefined. 
Action: Check the spelling. 
Action: Check that any custom tasks/types have been declared. 
Action: Check that any <presetdef>/<macrodef> declarations have taken place. 

     at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:508) 
     at org.apache.tools.ant.taskdefs.Definer.loadAntlib(Definer.java:434) 
     at org.apache.tools.ant.taskdefs.Definer.execute(Definer.java:281) 
     at org.apache.tools.ant.ComponentHelper.checkNamespace(ComponentHelper.java:790) 
     at org.apache.tools.ant.ComponentHelper.getDefinition(ComponentHelper.java:260) 
     at org.apache.tools.ant.ComponentHelper.createComponent(ComponentHelper.java:237) 
     at org.apache.tools.ant.ComponentHelper.createComponent(ComponentHelper.java:216) 
     at org.apache.tools.ant.UnknownElement.makeObject(UnknownElement.java:414) 
     at org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:160) 
     at groovy.util.AntBuilder.nodeCompleted(AntBuilder.java:186) 
     at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147) 
     at groovy.util.AntBuilder.doInvokeMethod(AntBuilder.java:154) 
     at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:64) 
     at org.codehaus.gant.GantBuilder.invokeMethod(GantBuilder.java:89) 
     at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) 
     at org.codehaus.gant.GantBinding.initializeGantBinding(GantBinding.groovy:109) 
     at org.codehaus.gant.GantBinding.this$4$initializeGantBinding(GantBinding.groovy) 
     at org.codehaus.gant.GantBinding$this$4$initializeGantBinding.callCurrent(Unknown Source) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java: 
44) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:1 
43) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:1 
47) 
     at org.codehaus.gant.GantBinding.<init>(GantBinding.groovy:42) 
     at org.codehaus.groovy.grails.cli.GrailsScriptRunner.callPluginOrGrailsScript(GrailsScriptRu 
nner.java:355) 
     at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeCommand(GrailsScriptRunner.java: 
279) 
     at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeCommand(GrailsScriptRunner.java: 
205) 
     ... 37 more 
Caused by: jar:file:/C:/ant/apache-ant-1.8.0/lib/ant.jar!/org/apache/tools/ant/antlib.xml:37: Proble 
m: failed to create task or type componentdef 
Cause: The name is undefined. 
Action: Check the spelling. 
Action: Check that any custom tasks/types have been declared. 
Action: Check that any <presetdef>/<macrodef> declarations have taken place. 

     at org.apache.tools.ant.UnknownElement.getNotFoundException(UnknownElement.java:484) 
     at org.apache.tools.ant.UnknownElement.makeObject(UnknownElement.java:416) 
     at org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:160) 
     at org.apache.tools.ant.taskdefs.Antlib.execute(Antlib.java:146) 
     at org.apache.tools.ant.taskdefs.Definer.loadAntlib(Definer.java:432) 
     ... 63 more 

Total time: 34 seconds 

Répondre

1

J'ai trouvé la source du problème.

Le problème n'était pas la version de Ant, mais plutôt la version de Grails et les scripts manquants. Cette application utilisait une version obsolète de Grails (version 1.1.1).

Le code suivant, que je répertorie pour les commodités de tout le monde, appelle un script. Cependant, dans cette application particulière, avait été supprimé le script, ce qui a provoqué le processus de construction de Grails à l'accident:

<macrodef name="grails"> 
<attribute name="script"/> 
<attribute name="args" default="" /> 
<sequential> 
    <grailsTask script="@{script}" args="@{args}" classpathref="grails.classpath"> 
     <compileClasspath refid="compile.classpath"/> 
     <testClasspath refid="test.classpath"/> 
     <runtimeClasspath refid="app.classpath"/> 
    </grailsTask> 
</sequential> 
</macrodef> 

La solution était simple: mettre à niveau Grails vers une version plus récente, comme 1.3.5. La construction a fonctionné sans problèmes après cela, même si certains scripts manquaient.

Je voudrais spéculer que ce nouveau comportement a permis de générer des scripts pendant l'échafaudage, mais en même temps donner la liberté au développeur de supprimer les scripts indésirables ou inutiles.

Merci à Burth Beckwith pour ses idées.

Luis Colorado

4

Grails est pas compatible avec Ant 1.8 - vous devez utiliser 1.7.x.

+0

Mais, Ivy n'apporterait-il pas automatiquement Ant 1.8? Ou ce n'est pas pertinent, tant que courir la construction en utilisant Ant 1.7? – luiscolorado

+0

Le problème est que 1.7 est dans le classpath puisqu'il est livré avec Grails, donc il est chargé en premier. –