Постоянные времени компиляции Flex - метка времени - PullRequest
5 голосов
/ 21 февраля 2010

Я пытаюсь использовать Константы времени компиляции Flex , чтобы включить дату и время создания SWF-файла (ревизия / отметка времени исходного контроля, такая как SVN: ключевых слов недостаточно для наших нужд, нам нужно знать фактическое время сборки, а не время фиксации).

Я пытался использовать actioncript (как в документации сказано, что вы должны это сделать):

-define+=COMPILE::Timestamp,"new Date()"

Но это дает «Инициализатор для значения конфигурации должен быть постоянной времени компиляции»

Я пытался перевести его в оболочку и использовать команду date (используя различные конфигурации с одинарными и двойными кавычками), например:

-define+=COMPILE::Timestamp,`date +%Y%m%d%H%M%S` 

Я могу заставить его работать только с простыми строками и простыми константными выражениями (например, я могу сделать 4-2, и это будет 2 во время выполнения. Но я не могу заставить его делать что-либо, чье значение не не будет явно известно в то время, когда я объявляю определение.

Кому-нибудь повезло с чем-то вроде этого?

Ответы [ 4 ]

3 голосов
/ 01 января 2011

У меня была та же проблема, и в итоге использовал этот пост в качестве отправной точки. Работал очень хорошо для меня. Просто пришлось обновить несколько битов класса, чтобы согнуть 4. Вытащил дату прямо из соблюдаемого swf.

0 голосов
/ 13 июля 2010

После тщательного исследования я пришел к выводу, что это просто невозможно.

0 голосов
/ 13 сентября 2010

Если вы не используете FlexBuilder для сборки, вы можете сделать это довольно легко.

Я делаю что-то подобное с FlexMojos в Maven.

В соответствующем разделе конфигурации:

                <definesDeclaration>
                    <property><name>BUILD::buildVersion</name><value>"${project.version}"</value></property>
                    <property><name>BUILD::buildRevision</name><value>"${buildNumber}"</value></property>
              <property><name>BUILD::buildTimestamp</name><value>"${timestamp}"</value></property>
                </definesDeclaration>

FlexBuilder в значительной степени отстой как среда сборки по причинам, подобным той, о которой вы упомянули

0 голосов
/ 21 февраля 2010

Ключом к вашей проблеме, скорее всего, является следующее утверждение Adobe, касающееся констант времени компиляции: Константа может быть логическим значением, строкой или числом или выражением, которое можно оценить в ActionScript во время компиляции.

Я бы предположил, что отметка времени недоступна во время компиляции.

Однако вместо этого вы можете попробовать использовать строку (что-то вроде этого)

public function GetUnixTime():String{
var myDate:Date = new Date();
var unixTime:Number = Math.round(myDate.getTime()/1000);
return unixTime.toString();
}

Другая мысль состоит в том, что вы можете получить информацию из скомпилированного файла.

Надеюсь, это поможет.

...