2010-07-07 4 views
6

Sto provando a passare un numero di build da Hudson in un'applicazione Flex.Definisce in azione script

Ho trovato il documento di Adobe (http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html) sulla compilazione condizionale che sembra dovrebbe risolverlo ma mi manca qualcosa.

Così nel mio file di generazione formica ho: -

<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> 

Poi sto cercando di recuperare con

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

Tuttavia il compilatore sta rifiutando con:

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

Eventuali suggerimenti?

+0

In base ai documenti relativi alla compilazione condizionale; sembra che tu stia facendo le cose esattamente nel modo giusto. Sono un po 'in perdita. http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html. Flex Compiler trasforma il tuo const statico pubblico in metodi getter/setter con una var privata? Questa conversione potrebbe in qualche modo causare il problema? – JeffryHouser

+0

Potrebbe essere. Ora è dritto nella vista.Posso farlo funzionare in Flash Builder, con -define + = BUILD :: BuildNumber, '00000000.000' nella sezione comandi aggiuntivi. Semplicemente non viene passato dalla formica mxmlc della formica. – Decado

risposta

2

Una combinazione degli altri suggerimenti qui sembra funzionare.

Questo dovrebbe andare nella vostra build.xml (si presuppone che la vostra build.xml ha già assegnato un valore a BUILD_NUMBER prima di questo punto):

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

Nota l'uso della &quot; senza virgolette. Nota anche che puoi usare questa sintassi con compc.

Poi il codice ActionScript può avere qualcosa di simile:

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

Non credo che si è necessariamente bisogno di utilizzare lo spazio dei nomi CONFIG, ma è una convenzione popolare.

0

C'è un commento di Laurynas Stančikas dicendo che si dovrebbe usare &quot;:

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

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

Hai provato questo?

+0

Ho provato questo. Tuttavia non è valido come è, e si lamenta che non è possibile avere sia la 'e lasulla stessa voce ... – Decado

0

ho appena risolto un problema javascript FlashVars con le citazioni, che ha ispirato un "provare questa" idea:

Prova la fuga:

< compiler.define name = "NOMI :: AppName" value = "\ 'FooBar \' "/ >

+0

Appena trovato l'ultima documentazione sulle compilazioni condizionali e Adobe mostra qualcosa di simile. Stanno per lo più mostrando argomenti da linea di comando, ma forse la sequenza di escape passerà attraverso la formica. Consulta "Passare le stringhe" all'indirizzo http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7abd.html –

1

È sicuramente un problema di quotazione. Ho combattuto questo per un bel po '. Comunque io uso il tag in form per eseguire mxmlc e compc quindi non sono sicuro che la mia risoluzione sia la stessa. Questo funziona sicuramente per me tho:

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

Posso suggerire di provare:

<define name="BUILD::BuildNumber" value="&quot;20100707.800&quot;"/>