2010-10-30 97 views
2

我有一个相对较旧的Grails应用程序,它使用ant来构建应用程序。在测试服务器就建立一个没有任何问题,但是当我试图在我的电脑上运行它,我得到一个一致的错误:componentdef错误与蚂蚁

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 

我发现,在构建的以下部分中出现错误:

<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> 

如果我注释掉,没有更多的错误。

如需进一步refererence,这里是整个错误转储:

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 

回答

1

我发现问题的根源。

问题不在于Ant的版本,而在于Grails和缺少脚本的版本。此应用程序使用了Grails(版本1.1.1)的已弃用版本。

下面的代码是我为每个人的便利而重新列出的,它调用了一个脚本。然而,在这个特定的应用程序,该脚本已被删除,造成Grails的构建进程崩溃:

<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> 

解决办法很简单:Grails的升级到最新版本,如1.3.5。之后,构建工作没有问题,即使有些脚本丢失。

我会推测这种新行为允许在脚手架期间生成脚本,但同时给予开发者自由去除不需要或不必要的脚本。

感谢Burth Beckwith的见解。

Luis Colorado

4

Grails是不使用Ant 1.8兼容 - 你需要使用1.7.x.

+0

但是,常春藤不会自动带蚂蚁1.8吗?或者这是无关紧要的,只要运行使用ant 1.7的构建? – luiscolorado 2010-11-01 14:54:54

+0

问题是,1.7在类路径中,因为它随Grails一起提供,所以它首先被加载。 – 2010-11-01 15:46:48