Java工作区中Ant构建ArrayIndexOutOfBoundsException

Java工作区中Ant构建ArrayIndexOutOfBoundsException,java,build,ant,ibm-rad,antbuilder,Java,Build,Ant,Ibm Rad,Antbuilder,我正在尝试用Ant构建脚本构建一个Web应用程序。应用程序有许多模块,编译两个项目后,生成失败,并出现以下错误日志: [javac]编译器(1.4.2)中发生异常。请在检查错误列表中是否有重复的错误后,在Java开发者连接()中提交一个错误。在报告中包括您的程序和以下诊断。非常感谢。 [javac]java.lang.ArrayIndexOutOfBoundsException:25459 这是一个Java4应用程序。我们已经尝试过用Ant版本1.7和1.8构建它,但都失败了,出现了相同的错误

我正在尝试用Ant构建脚本构建一个Web应用程序。应用程序有许多模块,编译两个项目后,生成失败,并出现以下错误日志:

[javac]编译器(1.4.2)中发生异常。请在检查错误列表中是否有重复的错误后,在Java开发者连接()中提交一个错误。在报告中包括您的程序和以下诊断。非常感谢。 [javac]java.lang.ArrayIndexOutOfBoundsException:25459

这是一个Java4应用程序。我们已经尝试过用Ant版本1.7和1.8构建它,但都失败了,出现了相同的错误

以下是完整的堆栈跟踪:

[javac] An exception has occurred in the compiler (1.4.2). Please file a bug at the Java Developer Connection (http://java.sun.com/cgi-bin/bugreport.cgi)  after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report.  Thank you.
[javac] java.lang.ArrayIndexOutOfBoundsException: 25459
[javac] at com.sun.tools.javac.v8.code.ClassReader.readPool(ClassReader.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.code.ClassReader.readName(ClassReader.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.code.ClassReader.readClassAttrs(ClassReader.java:795)
[javac] at com.sun.tools.javac.v8.code.ClassReader.readClass(ClassReader.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.code.ClassReader.readClassFile(ClassReader.java:963)
[javac] at com.sun.tools.javac.v8.code.ClassReader.fillIn(ClassReader.java:1121)
[javac] at com.sun.tools.javac.v8.code.ClassReader.complete(ClassReader.java:1076)
[javac] at com.sun.tools.javac.v8.code.Symbol.complete(Symbol.java(Inlined Compiled Code))
[javac] at com.sun.tools.javac.v8.code.Symbol$ClassSymbol.complete(Symbol.java(Inlined Compiled Code))
[javac] at com.sun.tools.javac.v8.code.ClassReader.loadClass(ClassReader.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Resolve.loadClass(Resolve.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Resolve.findIdentInPackage(Resolve.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Attr.selectSym(Attr.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Attr.visitSelect(Attr.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.tree.Tree$Select.accept(Tree.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Attr.attribTree(Attr.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Attr.attribType(Attr.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Enter$MemberEnter.visitImport(Enter.java:780)
[javac] at com.sun.tools.javac.v8.tree.Tree$Import.accept(Tree.java:424)
[javac] at com.sun.tools.javac.v8.comp.Enter$MemberEnter.memberEnter(Enter.java(Inlined Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Enter$MemberEnter.memberEnter(Enter.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Enter$MemberEnter.visitTopLevel(Enter.java:763)
[javac] at com.sun.tools.javac.v8.tree.Tree$TopLevel.accept(Tree.java:407)
[javac] at com.sun.tools.javac.v8.comp.Enter$MemberEnter.memberEnter(Enter.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.comp.Enter$CompleteEnter.complete(Enter.java:865)
[javac] at com.sun.tools.javac.v8.code.Symbol.complete(Symbol.java(Compiled Code))
[javac] at com.sun.tools.javac.v8.code.Symbol$ClassSymbol.complete(Symbol.java:708)
[javac] at com.sun.tools.javac.v8.comp.Enter.complete(Enter.java:618)
[javac] at com.sun.tools.javac.v8.comp.Enter.main(Enter.java:599)
[javac] at com.sun.tools.javac.v8.JavaCompiler.compile(JavaCompiler.java:348)
[javac] at com.sun.tools.javac.v8.Main.compile(Main.java:586)
[javac] at com.sun.tools.javac.Main.compile(Main.java:67)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
[javac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
[javac] at java.lang.reflect.Method.invoke(Method.java:391)
[javac] at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:56)
[javac] at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1134)
[javac] at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:912)
[javac] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[javac] at sun.reflect.GeneratedMethodAccessor26.invoke(Unknown Source)
[javac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:62)
[javac] at java.lang.reflect.Method.invoke(Method.java:391)
[javac] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[javac] at org.apache.tools.ant.Task.perform(Task.java:348)
[javac] at org.apache.tools.ant.Target.execute(Target.java:390)
[javac] at org.apache.tools.ant.Target.performTasks(Target.java:411)
[javac] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
[javac] at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
[javac] at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
[javac] at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:442)
[javac] at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105)
[javac] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
[javac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
[javac] at java.lang.reflect.Method.invoke(Method.java:391)
[javac] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[javac] at org.apache.tools.ant.Task.perform(Task.java:348)
[javac] at org.apache.tools.ant.Target.execute(Target.java:390)
[javac] at org.apache.tools.ant.Target.performTasks(Target.java:411)
[javac] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
[javac] at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
[javac] at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
[javac] at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:442)
[javac] at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105)
[javac] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
[javac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
[javac] at java.lang.reflect.Method.invoke(Method.java:391)
[javac] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[javac] at org.apache.tools.ant.Task.perform(Task.java:348)
[javac] at org.apache.tools.ant.Target.execute(Target.java:390)
[javac] at org.apache.tools.ant.Target.performTasks(Target.java:411)
[javac] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
[javac] at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
[javac] at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
[javac] at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:442)
[javac] at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105)
[javac] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[javac] at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
[javac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:62)
[javac] at java.lang.reflect.Method.invoke(Method.java:391)
[javac] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[javac] at org.apache.tools.ant.Task.perform(Task.java:348)
[javac] at org.apache.tools.ant.Target.execute(Target.java:390)

经过两天的努力,终于找到了问题。这是由JAR中的重复.class文件引起的。这是非常奇怪的,因为我看到ant任务在打包JAR时复制了重复的.class文件(在详细模式-v中有警告)。以下是构建脚本文件中的片段,它是罪魁祸首:

<jar destfile="${dir_dest}" manifest="${dir_src}/META-INF/MANIFEST.MF">
    <fileset dir="${dir_dest}" />   
    <fileset dir="${dir_src}" excludes="**/*.java"/> 
</jar>

脚本在我删除后成功运行:

<fileset dir="${dir_dest}" />

以下链接帮助我解决了这个问题:

报告相同(或类似)问题但没有答案的其他链接:


请花一分钟时间从其他人的角度看你的文章。你的问题是什么?你有没有跟踪链接,并试图找出这是否是一个报告的错误?考虑一些人可以从一个堆栈跟踪通知你很少的上下文信息。你可能得缩小范围,给我们一个帮助的机会。也许可以尝试一种“分而治之”的方法:产生错误的最小构建量是多少?谢谢Martin。我试图提供问题的狭隘观点,但这不是一个报告的bug。有时,堆栈跟踪是非常有用的,如果有人遇到类似的问题,他们会立即猜测。谢谢你的建议,我会听从你的建议。经过两天的努力,我终于找到了解决方案,并将发布给其他人参考。很高兴你找到了它-看起来是一个棘手的发现!