为什么$ {locale}不会在我的<compc> Ant任务中解析?</compc>

时间:2010-04-27 19:21:13

标签: flex ant locale compc

我见过很多例子e.g. here,其中人们通过引用元素中的locale属性来包含区域设置资源包。出于某种原因,这对我不起作用。这就是我的任务:

<compc output="${deploy.dir}/myfrmwrk.swc" locale="en_US">
    <source-path path-element="${basedir}/src/main/flex"/>
    <include-sources dir="${basedir}/src/main/flex" includes="*" />
    <include-libraries file="${basedir}/libs"/>
    <compiler.external-library-path dir="${FLEX_HOME}/frameworks/libs/player/9" append="true">
        <include name="playerglobal.swc"/>
    </compiler.external-library-path>
    <compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
        <include name="libs"/>
        <include name="locale/${locale}"/>
    </compiler.library-path>
    <load-config filename="${basedir}/fb3config.xml" />
</compc>

这失败了一堆形式的错误:

[compc] Error: could not find source for resource bundle ...

我可以通过这一改变来构建它:

<include name="locale/en_US"/>

Flex Builder 3生成的配置文件实际上将其呈现为“locale / {locale}”(注意$缺失)。我也尝试了相同(失败)的结果。

现在,我可以直接注入en_US,因为我们不会在很长一段时间内做本地化捆绑,但我最终还是需要让它工作。另外,它让我觉得我不能让它按照它应该的方式工作!

1 个答案:

答案 0 :(得分:2)

我认为这里的问题是${locale}被ant解释为属性,而不是传递给compc任务的字符串文字。我的意思是,ant看到${locale},并认为您想要替换属性locale的值,该属性是(在应用程序中)在构建文件中定义的。当然,这根本不是你想要的东西,因为它会让事情惨不忍睹。

我在构建文件中执行操作的方法是删除$前缀,所有内容似乎都按预期工作。所以你的例子看起来像这样:

<compc output="${deploy.dir}/myfrmwrk.swc" locale="en_US">
    <source-path path-element="${basedir}/src/main/flex"/>
    <include-sources dir="${basedir}/src/main/flex" includes="*" />
    <include-libraries file="${basedir}/libs"/>
    <compiler.external-library-path dir="${FLEX_HOME}/frameworks/libs/player/9" append="true">
        <include name="playerglobal.swc"/>
    </compiler.external-library-path>
    <compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
        <include name="libs"/>
        <!-- Ditch the dollar sign and things should work! -->
        <include name="locale/{locale}"/>
    </compiler.library-path>
    <load-config filename="${basedir}/fb3config.xml" />
</compc>