Почему ${locale} не разрешается в моей задаче Ant <compc>?

Я видел несколько примеров, например, здесь, где люди включают пакеты ресурсов локали, ссылаясь на атрибут локали в элементе. По какой-то причине это не работает для меня. Вот что у меня есть для этой задачи:

<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 ответ

Я думаю, что проблема здесь в том, что ${locale} интерпретируется ant как свойство, а не как строковый литерал для передачи compc задача. Я имею в виду, что муравей видит ${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>
Другие вопросы по тегам