Apache flex Flex编译时常量-时间戳

Apache flex Flex编译时常量-时间戳,apache-flex,flex3,flexbuilder,Apache Flex,Flex3,Flexbuilder,我试图使用它来包含SWF构建的日期和时间(源代码管理修订版/时间戳,如SVN:Keywords,不足以满足我们的需要,我们需要知道实际的构建时间,而不是提交时间) 我尝试过使用actionscript(就像文档中建议的那样): 但这会给出“配置值的初始值设定项必须是编译时常量” 我尝试将其放到shell中并使用date命令(使用各种单引号和双引号配置),例如: -define+=COMPILE::Timestamp,`date +%Y%m%d%H%M%S` 我只能让它处理简单的字符串和简单的

我试图使用它来包含SWF构建的日期和时间(源代码管理修订版/时间戳,如SVN:Keywords,不足以满足我们的需要,我们需要知道实际的构建时间,而不是提交时间)

我尝试过使用actionscript(就像文档中建议的那样):

但这会给出“配置值的初始值设定项必须是编译时常量”

我尝试将其放到shell中并使用date命令(使用各种单引号和双引号配置),例如:

-define+=COMPILE::Timestamp,`date +%Y%m%d%H%M%S` 
我只能让它处理简单的字符串和简单的常量表达式(例如,我可以在运行时执行
4-2
,它将在运行时执行
2
。但我无法让它执行任何在声明定义时无法显式知道其值的操作


有人遇到过类似的问题吗?

问题的关键很可能是Adobe在以下关于编译时常量的声明中提到的: 常量可以是布尔值、字符串或数字,也可以是可在编译时在ActionScript中计算的表达式

我假设时间戳在编译时不可用

但是,您可以尝试改用字符串(类似于以下内容)

另一个想法是,您可以从编译后的文件中获取信息


希望这能有所帮助。

经过广泛的研究,我得出结论,这根本不可行。

如果您不使用FlexBuilder进行构建,您可以非常轻松地完成构建

我在Maven用FlexMojos做了类似的事情

在相关配置部分:

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

BUILD::buildVersion“${project.version}”
BUILD::buildRevision“${buildNumber}”
BUILD::buildTimestamp“${timestamp}”

FlexBuilder作为一个构建环境非常糟糕,原因就像你提到的那样,我也遇到了同样的问题,并最终成为了一个起点。对我来说效果非常好。只需将类的一些部分更新到flex 4。将日期直接从符合的swf中删除。

“或者一个可以在编译时在ActionScript中计算的表达式”给了我希望,但即使是我能想到的最简单的场景(
-define+=compile::Timestamp,“new Date()”
)也不起作用(new Date().toString())。我尝试过创建一个类似于您的方法,但它给出的错误与上面所述的相同,”配置值的初始值设定项必须是编译时常量。“哦,还有,磁盘时间戳有点挫败了我试图实现的目标,那就是让Flex客户端“只知道”它的构建日期/时间(我有点惊讶没有预先提供这种类型的常量)。要使用时间戳,我们需要一些服务器端的东西来读取时间戳并将其报告回来。这使得时间戳取决于运行它的服务器的时间和时区、一些特定的服务器端软件,尤其是在错误情况下(我们要做的部分工作是在错误报告中包含构建时间),这可能会在我们身上失败。FWIW,一点背景:这是一个将嵌入其他应用程序中的库。我们不一定保证它将运行特定的服务器端运行时,甚至不一定它运行在网页、空中应用程序、桌面应用程序、手机小部件等中。您提供的链接将我引向这篇博文:。这将进一步提取它,并且不会引入任何其他库依赖项。它允许您从运行时访问编译时间(不使用定义,而是通过
LoaderInfo.GetLoaderInfo.ByDefinition(emptyClass).bytes从空类中读取它,并使用bytearray对此进行解析)
public function GetUnixTime():String{
var myDate:Date = new Date();
var unixTime:Number = Math.round(myDate.getTime()/1000);
return unixTime.toString();
}
                <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>