2010-07-07 7 views
6

Ich versuche, eine Build-Nummer von Hudson in eine Flex-Anwendung zu übergeben.Definiert in Aktion Skript

Ich habe Adobes Dokument (http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html) auf bedingte Kompilierung gefunden, das scheint es sollte es lösen, aber ich muss etwas verpassen.

Also in meinem Ant-Build-Datei habe ich: -

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

Dann versuche ich mit

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

abzurufen jedoch der Compiler mit ablehnt:

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

Irgendwelche Vorschläge?

+0

Basierend auf den Dokumenten zur bedingten Kompilierung; es sieht so aus, als ob du die Dinge genau richtig machst. Ich bin etwas verloren. http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html. Ändert der Flex Compiler Ihre öffentlichen statischen Const in Getter/Setter-Methoden mit einem privaten var? Könnte diese Konvertierung das Problem verursachen? – JeffryHouser

+0

Könnte sein. Es ist jetzt gerade in der Ansicht.Ich kann es in Flash Builder, mit -define + = BUILD :: BuildNumber, '00000000.000' in den zusätzlichen Befehlen Abschnitt arbeiten. Es wird einfach nicht vom ant mxmlc-Build weitergeleitet. – Decado

Antwort

2

Eine Kombination der anderen Vorschläge hier zu arbeiten scheint.

Diese in Ihrem build.xml gehen sollte (es wird davon ausgegangen, dass Ihr build.xml bereits ein Wert zugewiesen hat vor diesem Punkt BUILD_NUMBER):

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

Beachten Sie die Verwendung des &quot; ohne Anführungszeichen. Beachten Sie auch, dass Sie diese Syntax mit compc verwenden können.

Dann kann Actionscript-Code etwas wie diese:

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

Das glaube ich nicht, dass Sie unbedingt den CONFIG-Namespace verwenden müssen, aber es ist eine beliebte Konvention.

0

Es gibt einen Kommentar von Laurynas Stančikas sagen Sie &quot; verwenden sollten:

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

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

Haben Sie versucht das?

+0

Ich habe das versucht. Aber es ist ungültig, wie es ist, ant beschwert sich, dass Sie nicht die " auf dem gleichen Eintrag haben können ... – Decado

0

Ich löste nur ein Javascript flashvars Problem mit Zitaten, die eine "versuchen, diese" Idee inspiriert:

Versuchen zu entkommen:

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

+0

Nur die neueste Dokumentation zu bedingten Compiles gefunden und Adobe zeigt etwas ähnliches. Sie zeigen meist Befehlszeilenargumente, aber vielleicht wird die Escape-Sequenz durch ant laufen. Siehe "Passing Strings" unter http://help.adobe.com/de_DE/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7abd.html –

1

Es ist definitiv ein Zitat Problem. Ich habe das eine ganze Weile gekämpft. Allerdings verwende ich das Tag in Ant, um mxmlc und compc zu starten, also bin ich mir nicht sicher, ob meine Auflösung die gleiche ist. Dies funktioniert natürlich für mich tho:

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

Kann ich schlage vor, Sie versuchen:

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