2010-05-22 78 views
6

我正在对Flex项目的一组代码进行更改,这些代码我没有编写,并且设置为使用ant任务进行编译。我假设代码库在最后一次签入时是稳定的,但在尝试使用MXMLC和ant构建项目时遇到内存问题(请参阅下面的堆栈跟踪)。之前,我只是出现了内存不足的错误。我尝试使用不同的机器,并得到这个更详细的例外(包括与图像fetcher问题)。我试过使用各种版本的SDK,我试过用<exec executable="mxmlc">代替<mxmlc>标签,但没有运气。这是我的Java版本,以防与它有任何关系:MXMLC Ant任务结果为java.lang.OutOFMemoryError

» java -version 
java version "1.6.0_20" 
Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-10M3065) 
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01-279, mixed mode) 

任何帮助,将不胜感激。谢谢!

Buildfile: build.xml 

compileSWF: 
    [echo] Compiling main.swf... 
    [mxmlc] Loading configuration file /Applications/Adobe Flash Builder 4 Plug-in/sdks/4.0.0beta2/frameworks/flex-config.xml 
    [mxmlc] Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space 
    [mxmlc]  at java.awt.image.PixelGrabber.setDimensions(PixelGrabber.java:360) 
    [mxmlc]  at sun.awt.image.ImageDecoder.setDimensions(ImageDecoder.java:62) 
    [mxmlc]  at sun.awt.image.JPEGImageDecoder.sendHeaderInfo(JPEGImageDecoder.java:71) 
    [mxmlc]  at sun.awt.image.JPEGImageDecoder.readImage(Native Method) 
    [mxmlc]  at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:119) 
    [mxmlc]  at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:246) 
    [mxmlc]  at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172) 
    [mxmlc]  at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136) 
    [mxmlc] /src/com/amtrak/components/map/MapAsset.mxml: Error: exception during transcoding: Failed to grab pixels for image /src/assets/embed_assets/images/zoomed_map_wide.jpg 
    [mxmlc] 
    [mxmlc] /src/com/amtrak/components/map/MapAsset.mxml: Error: Unable to transcode /assets/embed_assets/images/zoomed_map_wide.jpg. 
    [mxmlc] 
    [mxmlc] Error: Java heap space 
    [mxmlc] 
    [mxmlc] java.lang.OutOfMemoryError: Java heap space 
    [mxmlc]  at java.util.ArrayList.<init>(ArrayList.java:112) 
    [mxmlc]  at macromedia.asc.util.ObjectList.<init>(ObjectList.java:30) 
    [mxmlc]  at macromedia.asc.parser.ArgumentListNode.<init>(ArgumentListNode.java:30) 
    [mxmlc]  at macromedia.asc.parser.NodeFactory.argumentList(NodeFactory.java:116) 
    [mxmlc]  at macromedia.asc.parser.NodeFactory.argumentList(NodeFactory.java:97) 
    [mxmlc]  at flex2.compiler.mxml.ImplementationGenerator.generateBinding(ImplementationGenerator.java:563) 
    [mxmlc]  at flex2.compiler.mxml.ImplementationGenerator.generateBindingsSetupFunction(ImplementationGenerator.java:864) 
    [mxmlc]  at flex2.compiler.mxml.ImplementationGenerator.generateBindingsSetup(ImplementationGenerator.java:813) 
    [mxmlc]  at flex2.compiler.mxml.ImplementationGenerator.generateInitializerSupportDefs(ImplementationGenerator.java:1813) 
    [mxmlc]  at flex2.compiler.mxml.ImplementationGenerator.generateClassDefinition(ImplementationGenerator.java:1005) 
    [mxmlc]  at flex2.compiler.mxml.ImplementationGenerator.<init>(ImplementationGenerator.java:201) 
    [mxmlc]  at flex2.compiler.mxml.ImplementationCompiler.generateImplementationAST(ImplementationCompiler.java:498) 
    [mxmlc]  at flex2.compiler.mxml.ImplementationCompiler.parse1(ImplementationCompiler.java:196) 
    [mxmlc]  at flex2.compiler.mxml.MxmlCompiler.parse1(MxmlCompiler.java:168) 
    [mxmlc]  at flex2.compiler.CompilerAPI.parse1(CompilerAPI.java:2851) 
    [mxmlc]  at flex2.compiler.CompilerAPI.parse1(CompilerAPI.java:2804) 
    [mxmlc]  at flex2.compiler.CompilerAPI.batch2(CompilerAPI.java:446) 
    [mxmlc]  at flex2.compiler.CompilerAPI.batch(CompilerAPI.java:1274) 
    [mxmlc]  at flex2.compiler.CompilerAPI.compile(CompilerAPI.java:1488) 
    [mxmlc]  at flex2.compiler.CompilerAPI.compile(CompilerAPI.java:1375) 
    [mxmlc]  at flex2.tools.Mxmlc.mxmlc(Mxmlc.java:282) 
    [mxmlc]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    [mxmlc]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    [mxmlc]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    [mxmlc]  at java.lang.reflect.Method.invoke(Method.java:597) 
    [mxmlc]  at flex.ant.FlexTask.executeInProcess(FlexTask.java:280) 
    [mxmlc]  at flex.ant.FlexTask.execute(FlexTask.java:225) 
    [mxmlc]  at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) 
    [mxmlc]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    [mxmlc]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    [mxmlc]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    [mxmlc]  at java.lang.reflect.Method.invoke(Method.java:597) 

BUILD FAILED 
/src/build.xml:49: mxmlc task failed 

回答

7

为Java-VM提供更多的堆空间,例如,

java -Xmx1024M 

或任何你需要:-)。在Linux下(也可能是其他的Unix),这可能做的伎俩与蚂蚁二进制:

ANT_OPTS="-Xmx1024M" ant 
+0

感谢mxmlc的任务相同的生成文件的示例。看起来像工作,但只有当我把它撞到4GB! – 2010-05-22 20:37:12

1

我有一个compc的类似问题。唯一似乎能够帮助我的是设置fork =“true”maxmemory =“256m”

+0

你从哪里确定数字** 256m **? – 2016-11-22 14:18:58

4

我们使用ant在单独的机器上构建一个flex应用程序(没有flex builder),唯一的解决方法是堆空间错误是为了增加build.xml中的最大内存。

设置ant_opts和java配置对我们不起作用。

<mxmlc file="${src-cp}/CP_main.mxml" output="${bin-dir}/CP/CP_main.swf" 
    show-unused-type-selector-warnings="false" 
    static-link-runtime-shared-libraries="true" fork="true" maxmemory="1024m"> 

更多信息http://tipila.com/tips/java-heap-error-when-building-flex-application-with-ant

+0

为什么** show-unused-type-selector-warnings **是'false'? – 2016-11-22 14:18:16

0

如果您在Flash Builder内启动一个Ant任务,去Preferences > Java > Installed JREs > Edit默认VM参数,例如增加对Java的相应的命令行参数-Xmx4096M

0

在我的情况下,我编译了几个不同的SWF,当我添加第五个时,我得到了内存错误。我解决这个问题的方式是一点点黑客攻击。我为使用exec ant任务编译的每个swf产生了新的JVM。

<target name="main"> 
      <exec executable="ant" os="Mac OS X"> 
       <arg value="antTargetCompileSwf1"/> 
      </exec> 
      <exec executable="ant" os="Windows 2000,Windows NT,Windows XP,Windows 8"> 
       <arg value="antTargetCompileSwf1"/> 
      </exec> 
      <exec executable="ant" os="Mac OS X"> 
       <arg value="antTargetCompileSwf2"/> 
      </exec> 
      <exec executable="ant" os="Windows 2000,Windows NT,Windows XP,Windows 8"> 
       <arg value="antTargetCompileSwf2"/> 
      </exec> 
     </target> 

这是我引用的每个目标antTargetCompileSwf2其中将包含最初抛出的内存错误