2010-07-07 2 views
6

Я пытаюсь передать номер сборки из Хадсона в приложение Flex.Определяет в действии скрипт

Я нашел документ Adobe (http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html) на условной компиляции, который, кажется, должен его решить, но я должен что-то упустить.

Так что в моем муравей построить файл у меня есть: -

<mxmlc 
     file="${app.dir}/${application.name}.mxml" 
     output="${dist.dir}/${application.name}.swf" 
     context-root="${application.name}" 
     debug="true" 
     locale="${locales}" 
     allow-source-path-overlap="true"> 
     <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/> 
     <compiler.library-path dir="${lib.dir}" append="true"> 
      <include name="*.swc" /> 
     </compiler.library-path> 
     <define name="BUILD::BuildNumber" value="'20100707.800'"/> 
     <source-path path-element="${src.dir}"/> 
     <source-path path-element="${cfg.dir}"/> 
     <source-path path-element="${locale.dir}" /> 
</mxmlc> 

Тогда я пытаюсь получить с

public static const buildNumber:String = BUILD::BuildNumber; 

Однако компилятор отвергает с:

SomeModel.as(31): col: 47 Error: Access of undefined property BUILD.
[mxmlc] private static const _buildNumber:String = BUILD::BuildNumber;

Какие-либо предложения?

+0

Основано на документах относительно условной компиляции; похоже, что вы делаете все правильно. Я немного потерял. http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html. Является ли компилятор Flex превращением вашего открытого static const в методы getter/setter с приватным var? Может ли такое преобразование каким-то образом вызвать проблему? – JeffryHouser

+0

Может быть. Теперь это прямолинейно.Я могу заставить его работать в Flash Builder, с -define + = BUILD :: BuildNumber, '00000000.000' в разделе дополнительных команд. Он просто не пропускает его из сборки ant mxmlc. – Decado

ответ

2

Сочетание других предложений здесь, кажется, работает.

Это должно идти в вашем build.xml (предполагается, что ваш build.xml уже присвоено значение для BUILD_NUMBER до этого момента):

<mxmlc> 
    ... 
    <define name="CONFIG::build" value="&quot;${BUILD_NUMBER}&quot;" /> 
    ...  
</mxmlc> 

Обратите внимание на использование &quot; без всяких кавычек. Также обратите внимание, что этот синтаксис можно использовать с compc.

Тогда ваш код ActionScript может иметь что-то вроде этого:

public static const buildNumber:String = CONFIG::build; 

Я не думаю, что вам обязательно нужно использовать пространство имен CONFIG, но это популярная условность.

0

Там есть комментарий по Лауринасу Станцикас говорит, что вы должны использовать &quot;:

To pass string with Ant (when using mxmlc task), use &quot; . For example:

<compiler.define name="NAMES::AppName" value="&quot;'FooBar'&quot;" /> 

вы пробовали что ли?

+0

Я пробовал это. Однако он недействителен, так как он жалуется, что вы не можете иметь и «и " на той же записи ... – Decado

0

Я просто решил яваскрипт Flashvars проблемы с кавычками, который вдохновил "попробовать эту" идею:

Попробуйте убежать:

< compiler.define Name = "ИМЕНА :: APPNAME" значение = "\ 'FooBar \' "/ >

+0

Только что нашел последнюю документацию по условным компиляциям, и Adobe показывает что-то подобное. В основном они приводят аргументы командной строки, но, возможно, escape-последовательность будет проходить через ant. См. «Передача строк» ​​по адресу http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7abd.html. – 2010-07-16 15:49:23

1

Это определенно проблема с цитированием. Некоторое время я боролся с этим. Однако я использую тег в ant для запуска mxmlc и compc, поэтому не уверен, что мое разрешение одинаково. Это, конечно, работает для меня Тхо:

<arg value="-define+=ENV::build,&quot;${build.id}&quot;" /> 
<arg value="-define+=ENV::version,&quot;${build.version}&quot;" /> 

Могу ли я предложить вам попробовать:

<define name="BUILD::BuildNumber" value="&quot;20100707.800&quot;"/> 
Смежные вопросы