Задача MXMLC Ant приводит к ошибке java.lang.OutOFMemoryError

Я вношу изменения в набор кода для проекта Flex, который я не писал и который был настроен для компиляции с использованием задач ant. Я предполагаю, что кодовая база была стабильной при последней проверке, но у меня возникают проблемы с памятью при попытке создать проект с использованием MXMLC и ant (см. Трассировку стека ниже). Раньше у меня просто возникала ошибка нехватки памяти. Я попытался использовать другую машину и получил более подробное исключение (включая проблемы с сборщиком изображений). Я пробовал использовать разные версии SDK, безуспешно пытался заменить тег <mxmlc> на <exec executable="mxmlc">. Вот моя версия java на случай, если это имеет какое-то отношение к этому:

» 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

person Mims H. Wright    schedule 22.05.2010    source источник


Ответы (5)


Дайте Java-VM больше места в куче, например

java -Xmx1024M

или что вам нужно :-). В Linux (и, возможно, в других Unix) это может помочь с двоичным файлом ant:

ANT_OPTS="-Xmx1024M" ant 
person Johannes Weiss    schedule 22.05.2010
comment
Спасибо. похоже, что это сработало, но только когда я увеличил его до 4 ГБ! - person Mims H. Wright; 23.05.2010

Мы использовали ant для создания гибкого приложения на отдельном компьютере (без гибкого конструктора), и единственный способ решить проблему с пространством кучи - это увеличить maxmemory в build.xml.

Установка ant_opts и java config у нас не сработала.

<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

person Amila    schedule 13.03.2012
comment
Почему show-unused-type-selector-warnings равно false? - person IgorGanapolsky; 22.11.2016

У меня были похожие проблемы с compc. Единственное, что мне помогло, это установить fork = "true" maxmemory = "256m"

person Maria Sakharova    schedule 13.09.2011
comment
Откуда вы определили число 256 м? - person IgorGanapolsky; 22.11.2016

Если вы запускаете задачу Ant из Flash Builder, перейдите к Preferences > Java > Installed JREs > Edit и добавьте соответствующий аргумент командной строки для Java в разделе Аргументы виртуальной машины по умолчанию, например -Xmx4096M

person awdz9nld    schedule 10.06.2014

В моем случае я компилировал несколько разных SWF, когда добавил пятый, то есть когда у меня возникла ошибка памяти. Я решил это с помощью небольшого взлома. Я создал новые JVM для каждого компилируемого swf с помощью задачи exec ant.

<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 в том же файле сборки, который будет содержать задачу mxmlc, которая изначально выдавала ошибку памяти.

person N D    schedule 14.10.2014