MXMLC Ant task - result of java.lang.OutOFMemoryError

I am making changes to the code set for a Flex project that I did not write, and was configured to compile using ant tasks. I assume that the code base was stable at the last check, but I have problems with memory when trying to create a project using MXMLC and ant (see below the stack trace). I used to have a memory error. I tried using a different machine and got this more detailed exception (including problems with the image application). I tried using different versions of the SDK, I tried replacing the <mxmlc> with <exec executable="mxmlc"> without any luck. Here is my version of java in case this has anything to do with it:

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

Any help would be greatly appreciated. Thanks!

 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 
+6
java flex ant mxmlc
source share
5 answers

Give Java-VM more heap, for example.

 java -Xmx1024M 

or what you need :-). On Linux (and possibly other Unix), this can do the trick with ant binary:

 ANT_OPTS="-Xmx1024M" ant 
+7
source share

We used ant to create a flexible application on a separate machine (without Flex Builder), and the only way that resolved the heap error was to increase maxmemory in build.xml.

Setting ant_opts and java config did not work for us.

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

Additional information http://tipila.com/tips/java-heap-error-when-building-flex-application-with-ant

+4
source share

I had similar problems with compc. The only thing that seemed to me was setting fork = "true" maxmemory = "256m"

+1
source share

If you run the Ant task from Flash Builder, go to Preferences > Java > Installed JREs > Edit and add the appropriate Java command line argument in the "Default VM Arguments" section, for example. -Xmx4096M

0
source share

In my case, I made up a few different SWFs when I added a fifth, when I received a memory error. The way I decided was to hack a bit. I created new JVMs for every swf that I compiled using the exec ant task.

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

This is an example in which I reference every antTargetCompileSwf2 target in the same assembly file that will contain the mxmlc task that initially threw a memory error

0
source share

All Articles