2010-05-22 5 views
6

Ich mache eine Änderung an einem Satz von Code für ein Flex-Projekt, das ich nicht geschrieben habe und eingerichtet wurde, um mit Ant-Aufgaben zu kompilieren. Ich gehe davon aus, dass die Codebase beim letzten Check-in stabil war, aber ich habe Probleme mit dem Speicher, wenn ich versuche, ein Projekt mit MXMLC und ant zu erstellen (siehe Stack-Trace unten). Vorher hatte ich nur einen Speicherfehler. Ich habe versucht, eine andere Maschine zu verwenden und bekam diese ausführlichere Ausnahme (einschließlich Probleme mit dem Bild-Fetcher). Ich habe versucht, verschiedene Versionen des SDK zu verwenden, ich habe versucht, das <mxmlc> Tag mit <exec executable="mxmlc"> ohne Glück zu ersetzen. Hier ist meine Java-Version für den Fall, dass etwas damit zu tun hat:MXMLC Ant Task führt zu java.lang.OutOFMemoryError

Jede Hilfe wäre willkommen. Vielen Dank!

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 

Antwort

7

Geben Sie der Java-VM mehr Heap-Speicherplatz, z.

java -Xmx1024M 

oder was immer Sie brauchen :-). Unter Linux (und wahrscheinlich auch andere Unix-Versionen), das könnte den Trick mit der Ameise binär tun:

ANT_OPTS="-Xmx1024M" ant 
+0

Dank des Speicherfehler zu werfen. sieht so aus als ob es funktionierte, aber nur wenn ich es auf 4GB gestoßen habe! –

1

ich mit compc ein ähnlichen Probleme hatte. Die einzige Sache, die mir zu helfen schien, war zu setzen fork = "true" maxmemory = "256m"

+0

Woher hast du die Nummer ** 256m ** ermittelt? –

4

Wir verwendeten Ameise, um eine Flex-App auf einer individuellen Maschine (ohne flex builder) zu bauen und der einzige Weg, der das gelöst Der Heap-Space-Fehler erhöhte den maxmemory in build.xml.

Einstellung ant_opts und java config hat für uns nicht funktioniert.

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

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

+0

Warum ** show-unused-type-selector-warnings ** ist 'false'? –

0

Wenn Sie eine Ant-Task von Flash Builder starten, gehen Sie zu Preferences > Java > Installed JREs > Edit und fügen Sie das entsprechende Befehlszeilenargument für Java unter Standard VM Argumente, z.B.

0

In meinem Fall kompilierte ich mehrere verschiedene SWFs, als ich die fünfte hinzugefügt, das ist, wenn ich den Speicherfehler bekam. Die Art, wie ich es gelöst habe, war mit einem kleinen Hack. Ich erzeugte neue JVMs für jeden swf, den ich kompilierte, indem ich die exec-ant-Aufgabe benutzte.

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

Dies ist ein Beispiel, wo ich jedes Ziel antTargetCompileSwf2 in der gleichen Build-Datei verweisen, die die mxmlc Aufgabe enthalten würden, die ursprünglich