我正在更改一个我没有编写的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
答案 0 :(得分:8)
为Java-VM提供更多的堆空间,例如
java -Xmx1024M
或任何你需要的东西:-)。在Linux(可能还有其他Unix)下,可以使用ant二进制文件来解决这个问题:
ANT_OPTS="-Xmx1024M" ant
答案 1 :(得分:5)
我们使用ant在单个机器上构建一个flex应用程序(没有flex builder),解决堆空间错误的唯一方法是增加build.xml中的maxmemory。
设置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
答案 2 :(得分:1)
我和compc有类似的问题。似乎唯一能帮助我的是设置fork =“true”maxmemory =“256m”
答案 3 :(得分:0)
如果要从Flash Builder中启动Ant任务,请转到Preferences > Java > Installed JREs > Edit
并在默认VM参数下为Java添加适当的命令行参数,例如: -Xmx4096M
答案 4 :(得分: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,该文件将包含最初抛出内存错误的mxmlc任务