Flex Ant tasks mxmlcでコンパイルすると「トランスコーディングのために解決できません」エラーが発生

事象

Flex Builder 3でビルド成功するコードをFlex Ant tasksのmxmlcタスクでコンパイルしようとすると、Embedメタデータで「トランスコーディングのために解決できません」というエラーが発生してビルド失敗する。mxmlcコマンド単独で動かしても同様のビルド失敗となる。


対象コード

<mx:Button icon="@Embed('image/btn.png')"/>

エラー内容

[mxmlc] C:\...\src\MyApp.mxml(19): エラー: 'image/btn.png' をトランスコーディングのために解決できません
[mxmlc]     <mx:Button icon="@Embed('image/btn.png')"/>
[mxmlc] C:\...\src\MyApp.mxml(19): エラー: image/btn.png をトランスコードできません。
[mxmlc]     <mx:Button icon="@Embed('image/btn.png')"/>
BUILD FAILED

原因と対処

@Embedのパス指定に/(スラッシュ)が無かったのが原因。

<mx:Button icon="@Embed('/image/btn.png')"/>

その他

Flex BuilderでのビルドとAntでのビルドで差異が発生してしまう問題とその対策。

Flex Builderを利用してAdobe Flex Builderプロジェクトをコンパイルすると問題が発生しないにもかかわらず、Antを用いて同じプロジェクトをコンパイルすると、生成されたアプリケーション(またはライブラリ)が正常に機能しないことがあります。
・・・
構成ファイルを生成するには、Flex Builder上で次のコマンドラインオプションを追加します。
Windows
-dump-config=c:\myconf.xml
Mac/Unix
-dump-config=/tmp/myconf.xml

Flexテクニカルノート:Flex Builderのコンパイル結果とFlex Ant Tasksのコンパイル結果が一致しない


ついでなので、試しに作ったbuild.xmlも載せておきます。

<?xml version="1.0" encoding="utf-8"?>
<project name="MyApp Builder" basedir="." default="build-debug">

    <property name="FLEX_HOME" value="C:/Program Files/Adobe/Flex Builder 3 Plug-in/sdks/3.5.0.12683" />
    <property name="APP_ROOT" value="${basedir}" />
    <property name="SRC_DIR" value="${basedir}/src" />
    <property name="GENERATED_DIR" value="${basedir}/generated" />
    <property name="BIN_DEBUG_DIR" value="${basedir}/bin-debug" />
    <property name="BIN_RELEASE_DIR" value="${basedir}/bin-release" />

    <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />

    <target name="build-debug" depends="clean">
        <mxmlc file="${basedir}/src/MyApp.mxml" output="${BIN_DEBUG_DIR}/MyApp.swf" actionscript-file-encoding="UTF-8" keep-generated-actionscript="false" debug="true" locale="ja_JP">
            <compiler.source-path path-element="${basedir}/src" />

            <!-- Get default compiler options. -->
            <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml" />
            <load-config filename="${basedir}/.settings/myconf.xml" />
        </mxmlc>
    </target>

    <target name="build-release" depends="clean">
        <mxmlc file="${basedir}/src/MyApp.mxml" output="${BIN_RELEASE_DIR}/MyApp.swf" actionscript-file-encoding="UTF-8" keep-generated-actionscript="false" debug="false" locale="ja_JP">
            <compiler.source-path path-element="${basedir}/src" />
            <compiler.source-path path-element="${basedir}/../i-Ts-server/src/resources" />

            <!-- Get default compiler options. -->
            <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml" />
            <load-config filename="${basedir}/.settings/myconf.xml" />

        </mxmlc>
    </target>
   
    <target name="clean">
        <delete dir="${GENERATED_DIR}" />
        <delete>
            <fileset dir="${BIN_DEBUG_DIR}" includes="MyApp.swf" />
            <fileset dir="${BIN_RELEASE_DIR}" includes="MyApp.swf" />
        </delete>
    </target>
</project>