I hadn't seen these compile-configs before. Were these introduced with the
Apache move or were they part of the Adobe SDK too?
I created a compile-config [1] and it works for my first SWC, but my second
SWC, which depends on the first one as well as the SDK, is failing to
resolve a number of MX components:
core:
[echo]
[echo] Compiling core library
[echo]
[compc] Loading configuration file
C:\dev\oneplace-app\trunk\flex4\compile-config.xml
[compc] C:\<path>\build\core.swc (326846 bytes)
common:
[echo]
[echo] Compiling common library
[echo]
[compc] Loading configuration file
C:\dev\oneplace-app\trunk\flex4\compile-config.xml
[compc] C:\<path>\DropDownItemRenderer.mxml(5): Error: Could not
resolve <mx:Label> to a component implementation.
[compc]
[compc] htmlText="{ _list.labelFunction( data ) }">
[compc]
[compc] C:\<path>\ShorterTextInput.mxml(2): Error: Could not resolve
<mx:TextInput> to a component implementation.
[compc]
[compc] <mx:TextInput xmlns:mx="http://www.adobe.com/2006/mxml">
[compc] //and so on...
The targets are setup like so [2] (where *core* is successful but
*common* fails
to build with the above errors). The macrodef and target configuration
works when I use the standard flex-config, so I think there is something
wrong with my compile-config, but it looks very similar to the examples I
see in the framework...
[1] http://pastebin.com/c2G8D3B0
[2] http://pastebin.com/QYhpCZU5
On Wed, Apr 17, 2013 at 10:40 PM, Alex Harui <[email protected]> wrote:
> I don't think you want to change flex-config.xml. That will change the way
> every SWF gets linked.
>
> Instead, you can create a separate foo-config.xml and use it for SWFs and
> SWCs that aren't the main app. If you look at how the SDK gets built,
> there
> is a compile-config.xml for each SWC.
>
>
> On 4/17/13 3:17 PM, "Michael Baird" <[email protected]> wrote:
>
> > Understood. It's a pretty simple skin, anyway - just extends
> > mx.skins.halo.LinkButtonSkin and overrides *updateDisplayList* to make
> some
> > graphics calls (at one point it checks parent.tabIndex, which is where
> the
> > NPE occurs).
> >
> > I created a copy of the default flex-config and moved the contents of the
> > library-path to external-library-path (except for the player reference in
> > library path) [1]. I think there must be another step I am missing,
> because
> > now the application fails to load:
> >
> > Loading library
> > VerifyError: Error #1014: Class mx.core::Application could not be found.
> >
> > at flash.display::MovieClip/nextFrame()
> > at
> >
> mx.managers::SystemManager/deferredNextFrame()[/Users/justinmclean/Documents/A
> >
> pacheFlexSDK/frameworks/projects/framework/src/mx/managers/SystemManager.as:28
> > 6]
> > at
> >
> mx.managers::SystemManager/preloader_preloaderDocFrameReadyHandler()[/Users/ju
> >
> stinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/manage
> > rs/SystemManager.as:2635]
> > at flash.events::EventDispatcher/dispatchEventFunction()
> > at flash.events::EventDispatcher/dispatchEvent()
> > at
> >
> mx.preloaders::Preloader/timerHandler()[/Users/justinmclean/Documents/ApacheFl
> > exSDK/frameworks/projects/framework/src/mx/preloaders/Preloader.as:523]
> > at flash.utils::Timer/_timerDispatch()
> > at flash.utils::Timer/tick()
> >
> > Sorry for the back and forth. Hoping there's an easy solution just over
> the
> > horizon =)
> >
> >
> > [1] http://pastebin.com/EAkZDUkW
> >
> >
> > On Wed, Apr 17, 2013 at 12:56 PM, Alex Harui <[email protected]> wrote:
> >
> >> Hi Michael,
> >>
> >> Attachments aren't supported on the mailing list. The warning could be
> >> related. It is probably best to specify dependent swcs via
> >> external-library-path and make sure all of those swcs or rsls are
> otherwise
> >> in the application.
> >>
> >>
> >> On 4/17/13 12:20 PM, "Michael Baird" <[email protected]> wrote:
> >>
> >>> Thanks for helping with this, Alex. I think I'm getting a little
> closer.
> >> I've
> >>> switched to using mxmlc/compc AntTasks and I can load the main
> >> application and
> >>> the submodules now.
> >>>
> >>> I have, however, some Flex 3 skin(s) that seem to be failing at
> runtime.
> >>> Unlike before, this happens with the ant-built application as well as
> the
> >>> FlashBuilder-built application. I've attached my skin, which is
> throwing
> >> a NPE
> >>> at line 41, implying parent is null. I've tried checking for parent ==
> >> null
> >>> and returning, and I also wrapped the whole thing in a try/catch, but
> >> the same
> >>> error keeps getting thrown.
> >>>
> >>> In dealing with this skin issue, I've tried
> >> adding isolate-styles=false as
> >>> well
> >>>
> >> as runtime-shared-library-settings.application-domain
> >> application-domain-targe
> >>> t="top-level" for all my custom libraries, to no apparent effect.
> >>>
> >>> I generated a link-report for my style resource SWF and it does include
> >> a link
> >>> to the LinkButtonSkin, so I think that's okay.
> >>>
> >>> When compiling the libraries, I do get this interesting warning (it is
> >>> repeated for SDK mx.swc and charts.swc), that may or may not be
> related.
> >> It's
> >>> coming from the flex-config xml.
> >>> [compc] Warning: The swc
> >>> 'C:\Apache\Flex\4.9.1\frameworks\libs\framework.swc' has style defaults
> >> and is
> >>> in the library-path, which means dependencies will be linked in without
> >> the
> >>> styles. This can cause applications, which use the output swc, to have
> >>> missing skins. The swc should be put in the external-library-path.
> >>>
> >>> Any thoughts here are much appreciated.
> >>>
> >>>
> >>> On Tue, Apr 16, 2013 at 8:22 PM, Alex Harui <[email protected]> wrote:
> >>>> From that output, if I'm interpreting it correctly, core.swc loads,
> then
> >>>> common.swc. Common.swc seems to have a dependency on Button, which
> >> hasn't
> >>>> been loaded yet since only core has been loaded.
> >>>>
> >>>> Should common.swc have a dependency on Button? If so, you will need
> to
> >> load
> >>>> mx.swc beforehand. I think the compiler/linker is smart enough not to
> >>>> request loading of RSLs that aren't used by the application. But then
> >> if
> >>>> your custom RSL needs Button the compiler/linker doesn't know that.
> >>>>
> >>>>
> >>>> On 4/16/13 5:06 PM, "Michael Baird" <[email protected]> wrote:
> >>>>
> >>>>> I've analyzed the link-report and also checked out the catalog XML.
> >>>>>
> >>>>> The main library, which gets compiled as core.swc and then treated as
> >> an
> >>>>> external-library (+ rsl) by all the other targets, has a catalog.xml
> >> that
> >>>>> contains references to mx.controls:Button. I had the main application
> >>>>> target generate a link-report and that also contains references to
> the
> >>>>> mx.controls:Button class.
> >>>>>
> >>>>> So the linkage "appears" to be correct according to these reports.
> >>>>>
> >>>>> I tried to change the main application target to use
> >>>>> -library-path+=core.swc instead of -external-library-path, but that
> >>>>> resulted in no change.
> >>>>>
> >>>>> Fun fact: I added a custom debug config to FlashBuilder and launched
> >> the
> >>>>> application. Here's the console result:
> >>>>>
> >>>>> [SWF] C:\<path>\oneplace_client.swf - 1,869,468 bytes after
> >> decompression
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> Loading library
> >>>>> [SWF] /core.swf - 1,612,732 bytes after decompression
> >>>>> Loading library
> >>>>> Loaded library 0 of 5
> >>>>> Loading library
> >>>>> [SWF] /common.swf - 1,203,976 bytes after decompression
> >>>>> VerifyError: Error #1014: Class mx.controls::Button could not be
> found.
> >>>>>
> >>>>> Could I be missing a step to generate a valid RSL for the libraries
> >> (e.g.
> >>>>> addressing the *VerifyError*)? Here is my *core* library target:
> >>>>> <java jar="${compc.jar.path}"
> >>>>> failonerror="true"
> >>>>> fork="true">
> >>>>> <jvmarg value="-Xmx512m"/>
> >>>>> <arg value='-debug=${debug}'/>
> >>>>> <arg
> >>>>>
> value='-local-fonts-snapshot=${FLEX_HOME}/frameworks/localFonts.ser'/>
> >>>>> <arg value='-load-config=${flex.config}'/>
> >>>>> <arg
> >>>>> value='-theme=${FLEX_HOME}/frameworks/themes/Halo/halo.swc'/>
> >>>>> <arg value='-source-path+=${lib.core}'/>
> >>>>> <arg value='-include-sources=${lib.core}'/>
> >>>>> <arg value='-output=${build.dir}/core.swc'/>
> >>>>> </java>
> >>>>>
> >>>>> Then the main application target:
> >>>>> <java jar="${mxmlc.jar.path}"
> >>>>> failonerror="true"
> >>>>> fork="true">
> >>>>> <jvmarg value="-Xmx512m"/>
> >>>>> <arg value='-debug=${debug}'/>
> >>>>> <arg
> >>>>>
> value='-local-fonts-snapshot=${FLEX_HOME}/frameworks/localFonts.ser'/>
> >>>>> <arg value='-load-config=${flex.config}'/>
> >>>>> <arg
> >>>>> value='-theme=${FLEX_HOME}/frameworks/themes/Halo/halo.swc'/>
> >>>>> <arg value='-runtime-shared-libraries=${core.swf}'/>
> >>>>> <arg
> value='-external-library-path=${build.dir}/core.swc'/>
> >>>>> <arg value='-runtime-shared-libraries=${common.swf}'/>
> >>>>> <arg
> >> value='-external-library-path=${build.dir}/common.swc'/>
> >>>>> <arg
> >>>>> value='-runtime-shared-libraries=${swiz-framework-v1.4.0.swf}'/>
> >>>>>
> >>>>> <!-- CampaignWrapper Libs BEGIN -->
> >>>>> <arg
> >> value='-runtime-shared-libraries=${campaign_common.swf}'/>
> >>>>> <arg
> >>>>> value='-external-library-path+=${build.dir}/campaign_common.swc'/>
> >>>>> <arg
> >> value='-runtime-shared-libraries=${synchronization.swf}'/>
> >>>>> <arg
> >>>>> value='-external-library-path=${build.dir}/synchronization.swc'/>
> >>>>> <arg value='-source-path+=${lib.campaign}'/>
> >>>>> <!-- CampaignWrapper Libs END -->
> >>>>>
> >>>>> <arg value='-file-specs=${app.main}/${client.name
> >>>>> <http://client.name> }.mxml'/>
> >>>>> <arg value='-output=${build.dir}/${client.name
> >>>>> <http://client.name> }.swf'/>
> >>>>> <arg value='-link-report=${build.dir}/report.xml'/>
> >>>>> </java>
> >>>>>
> >>>>> (Note: those are all custom SWCs I'm treating as
> >> RSLs/external-libraries.
> >>>>> The Flex ones are loaded - or supposed to be loaded - through the
> >>>>> -load-config argument.)
> >>>>>
> >>>>> Any further ideas are greatly appreciated!
> >>>>>
> >>>>>
> >>>>>
> >>>>> On Tue, Apr 9, 2013 at 12:22 PM, Michael Baird <[email protected]>
> >> wrote:
> >>>>>
> >>>>>> I'll check out the link-report and see what's going on. The main
> >>>>>> application MXML target is generating one, which is used for the
> >> modules
> >>>>>> through load-externs.
> >>>>>>
> >>>>>> The externals indicated by the module target I provided are some of
> >> our
> >>>>>> common libraries that are built as SWCs earlier in the script. The
> >> Flex
> >>>>>> ones are only included through flex-config.
> >>>>>> e.g.
> >>>>>> <java jar="${compc.jar.path}"
> >>>>>> failonerror="true"
> >>>>>> fork="true">
> >>>>>> <jvmarg value="-Xmx512m"/>
> >>>>>> <arg value='-debug=${debug}'/>
> >>>>>> <arg
> >>>>>>
> value='-local-fonts-snapshot=${FLEX_HOME}/frameworks/localFonts.ser'/>
> >>>>>> <arg
> >>>>>> value='-load-config=${FLEX_HOME}/frameworks/flex-config.xml'/>
> >>>>>> <arg
> >>>>>> value='-theme=${FLEX_HOME}/frameworks/themes/Halo/halo.swc'/>
> >>>>>> <arg
> >> value='-external-library-path+=${build.dir}/core.swc'/>
> >>>>>> <arg value='-runtime-shared-libraries=${core.swf}'/>
> >>>>>> <arg value='-source-path+=${lib.common}'/>
> >>>>>> <arg value='-include-sources=${lib.common}'/>
> >>>>>> <arg value='-output=${build.dir}/common.swc'/>
> >>>>>> </java>
> >>>>>>
> >>>>>> (core being another of our libraries)
> >>>>>>
> >>>>>>
> >>>>>> On Tue, Apr 9, 2013 at 12:12 PM, Alex Harui <[email protected]>
> wrote:
> >>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> On 4/9/13 10:41 AM, "Michael Baird" <[email protected]> wrote:
> >>>>>>>
> >>>>>>>> Okay, I understand the Sprite issue might be something wrong with
> >> our
> >>>>>>>> resource builder (yes, embedded assets and css compiled into a
> >> resource
> >>>>>>> SWF
> >>>>>>>> so I'll look for misconfigurations there).
> >>>>>>>>
> >>>>>>>> Shouldnt mx.controls.Button be included through the standard
> >>>>>>> flex-config or
> >>>>>>>> is that getting messed up because of the module externals?
> >>>>>>> Flex-config directs compile-time. It must be "ok" since you are
> >> getting
> >>>>>>> SWFs and then run-time errors. It is options like
> >> -external-library-path
> >>>>>>> that cause the linker to exclude classes, which is what you want,
> >> but then
> >>>>>>> you have to make sure they get loaded and loaded correctly.
> >>>>>>>>
> >>>>>>>> Do you happen to know what/how this changed from 4.1 to now? This
> >> same
> >>>>>>>> build script is working with SDK 4.1.0.
> >>>>>>> I don't know off-hand. It is possible that we got better at not
> >> requiring
> >>>>>>> mx components in spark apps. A link-report will tell you what
> >> classes are
> >>>>>>> ending up where.
> >>>>>>>
> >>>>>>> BTW, did you obfuscate the SWC names? I don't recognize common and
> >>>>>>> charting
> >>>>>>> as Flex SWCs. If you custom built these SWCs then there might be
> an
> >> issue
> >>>>>>> with what classes are in it. A SWC is a zip file and in it is a
> >>>>>>> catalog.xml
> >>>>>>> which is like a link-report: it tells you which classes are in the
> >> SWC.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Mon, Apr 8, 2013 at 9:16 PM, Alex Harui <[email protected]>
> >> wrote:
> >>>>>>>>
> >>>>>>>>> The -external-library-path options are forcing certain classes to
> >> not
> >>>>>>> be
> >>>>>>>>> linked into the SWF, but those classes are not being loaded into
> >> the
> >>>>>>>>> ApplicationDomain tree in a way that SWF can access it or aren't
> >> being
> >>>>>>>>> loaded at all.
> >>>>>>>>>
> >>>>>>>>> The XXXX_flash.display_Sprite class is probably an embedded asset
> >> and
> >>>>>>> not
> >>>>>>>>> an
> >>>>>>>>> actual Flash Player class.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On 4/8/13 5:41 PM, "Michael Baird" <[email protected]> wrote:
> >>>>>>>>>
> >>>>>>>>>> I have a large application with multiple shared libraries and
> >>>>>>> sub-modules
> >>>>>>>>>> that I'm trying to build through Ant and I'm running into
> >> issues...
> >>>>>>>>> hoping
> >>>>>>>>>> someone here can help.
> >>>>>>>>>>
> >>>>>>>>>> I'm currently targeting the latest AF release - 4.9.1 - and
> >> running
> >>>>>>> into
> >>>>>>>>> an
> >>>>>>>>>> issue where when I launch the Ant-built application, I receive
> one
> >>>>>>> Flash
> >>>>>>>>>> exception:
> >>>>>>>>>> VerifyError: Error #1014: Class mx.controls::Button could not be
> >>>>>>> found.
> >>>>>>>>>> then another:
> >>>>>>>>>> ReferenceError: Error #1065: Variable
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>>>
> >>
> _88d866d22da27af4b5978eeb7ebb39d5d661776417e03b75890d49335a9fed4d_flash_di
> >>>>>>> sp
> >>>>>>> l>>
> >>>>>>> a
> >>>>>>>>>> y_Sprite
> >>>>>>>>>> is not defined.
> >>>>>>>>>>
> >>>>>>>>>> This seems to indicate that the Flash player is not being
> included
> >>>>>>>>> somehow
> >>>>>>>>>> but I can't figure out why!
> >>>>>>>>>>
> >>>>>>>>>> Here is an example of one of my module targets:
> >>>>>>>>>> <target name="dashboard"
> >>>>>>>>>> depends="client">
> >>>>>>>>>> <java jar="${mxmlc.jar.path}"
> >>>>>>>>>> failonerror="true"
> >>>>>>>>>> fork="true">
> >>>>>>>>>> <jvmarg value="-Xmx512m"/>
> >>>>>>>>>> <arg value='-debug=${debug}'/>
> >>>>>>>>>> <arg
> >>>>>>>>>>
> >> value='-local-fonts-snapshot=${FLEX_HOME}/frameworks/localFonts.ser'/>
> >>>>>>>>>> <arg
> >>>>>>>>>> value='-load-config=${FLEX_HOME}/frameworks/flex-config.xml'/>
> >>>>>>>>>> <arg
> >>>>>>>>>> value='-theme=${FLEX_HOME}/frameworks/themes/Halo/halo.swc'/>
> >>>>>>>>>> <arg value='-source-path+=${lib.dashboard}'/>
> >>>>>>>>>> <arg value='-runtime-shared-libraries=${core.swf}'/>
> >>>>>>>>>> <arg
> >>>>>>> value='-external-library-path=${build.dir}/core.swc'/>
> >>>>>>>>>> <arg
> value='-runtime-shared-libraries=${common.swf}'/>
> >>>>>>>>>> <arg
> >>>>>>> value='-external-library-path=${build.dir}/common.swc'/>
> >>>>>>>>>> <arg
> >> value='-runtime-shared-libraries=${charting.swf}'/>
> >>>>>>>>>> <arg
> >>>>>>>>> value='-external-library-path=${build.dir}/charting.swc'/>
> >>>>>>>>>> <arg
> >>>>>>>>>>
> >> value='-file-specs=${lib.dashboard}/${view.dir}/DashboardView.mxml'/>
> >>>>>>>>>> <arg
> >>>>>>>>>> value='-output=${build.dir}/${view.dir}/DashboardView.swf'/>
> >>>>>>>>>> <arg value='-load-externs=${build.dir}/report.xml'/>
> >>>>>>>>>> </java>
> >>>>>>>>>> </target>
> >>>>>>>>>>
> >>>>>>>>>> FLEX_HOME is defined earlier in the build script as the path to
> >> the
> >>>>>>> 4.9.1
> >>>>>>>>>> base directory.
> >>>>>>>>>>
> >>>>>>>>>> I have also tried using anttasks, and that is working a little
> >> better
> >>>>>>>>>> except when I load a module with charts - then I get another
> >> missing
> >>>>>>>>> class:
> >>>>>>>>>> VerifyError: Error #1014: Class mx.charts::CategoryAxis could
> not
> >> be
> >>>>>>>>> found.
> >>>>>>>>>>
> >>>>>>>>>> So overall it seems like I'm having linking issues, but I'm
> using
> >>>>>>> stock
> >>>>>>>>>> flex-configs that look like they are including the right
> >> libraries in
> >>>>>>> the
> >>>>>>>>>> right places.
> >>>>>>>>>>
> >>>>>>>>>> Any help is appreciate... thanks =)
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> Alex Harui
> >>>>>>>>> Flex SDK Team
> >>>>>>>>> Adobe Systems, Inc.
> >>>>>>>>> http://blogs.adobe.com/aharui
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Alex Harui
> >>>>>>> Flex SDK Team
> >>>>>>> Adobe Systems, Inc.
> >>>>>>> http://blogs.adobe.com/aharui
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>
> >>>> --
> >>>> Alex Harui
> >>>> Flex SDK Team
> >>>> Adobe Systems, Inc.
> >>>> http://blogs.adobe.com/aharui
> >>>>
> >>>
> >>>
> >>
> >> --
> >> Alex Harui
> >> Flex SDK Team
> >> Adobe Systems, Inc.
> >> http://blogs.adobe.com/aharui
> >>
> >>
>
> --
> Alex Harui
> Flex SDK Team
> Adobe Systems, Inc.
> http://blogs.adobe.com/aharui
>
>