【问题标题】:Flex Compile Time Constants - TimestampFlex 编译时间常数 - 时间戳
【发布时间】:2011-01-19 05:38:16
【问题描述】:

我正在尝试使用Flex Compile Time Constants 来包含构建 SWF 的日期和时间(源代码控制修订/时间戳,例如 SVN:Keywords 不足以满足我们的需求,我们需要知道实际的构建时间,而不是提交时间)。

我尝试过使用 actionscript(就像文档建议您应该能够那样):

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

但这给出了“配置值的初始化程序必须是编译时间常数”

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

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

我只能让它与简单的字符串和简单的常量表达式一起工作(例如,我可以做4-2,在运行时它会是2。但我不能让它做任何价值不会'在我声明定义时并不明确。

有人遇到过这样的事情吗?

【问题讨论】:

    标签: apache-flex flex3 flexbuilder


    【解决方案1】:

    我遇到了同样的问题,最终以using this blog post 为起点。对我来说效果很好。只需将课程的一些内容更新为 flex 4。直接从已编译的 swf 中提取日期。

    【讨论】:

    • 你提供的那个链接把我带到了这篇博文:igorcosta.org/?p=220。这进一步提炼了它,并且不会引入任何额外的库依赖项。它使您可以从运行时访问编译时间(不使用定义,而是通过 LoaderInfo.getLoaderInfoByDefinition(emptyClass).bytes 从空类中读取它并使用字节数组解析)
    【解决方案2】:

    您的问题的关键很可能在 Adob​​e 引用编译时间常数的以下陈述中: 常量可以是布尔值、字符串或数字,或者是可以在编译时在 ActionScript 中计算的表达式。

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

    但是,您可以尝试使用字符串来代替(类似这样)

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

    另一个想法是你可以从编译的文件中获取信息。

    希望这会有所帮助。

    【讨论】:

    • “或者可以在编译时在 ActionScript 中求值的表达式”给了我希望,但即使是我能想到的最简单的场景 (-define+=COMPILE::Timestamp,"new Date()") 也不起作用(也不起作用new Date().toString())。我确实尝试过创建一个像你这样的方法,但它给出了与上述相同的错误,“配置值的初始化程序必须是编译时间常数。”
    • 哦,另外,磁盘时间戳有点打败了我试图完成的任务,即让 Flex 客户端“只知道”它的构建日期/时间(我有点惊讶没有这种类型的预先提供的常量)。要使用时间戳,我们需要在服务器端读取时间戳并将其报告回来。这使得它依赖于运行它的服务器的时间和时区,一些特定的服务器端软件,特别是在错误情况下(我们想要做的一部分是在错误报告中包含构建时间),这可能会失败我们。
    • FWIW,一点背景知识:这是一个将嵌入到其他应用程序中的库。我们不一定保证它会运行特定的服务器端运行时,甚至不一定保证它运行在网页、Air 应用、桌面应用、手机小部件等中。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      如果您不使用 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>
      

      出于您提到的原因,FlexBuilder 作为一个构建环境非常糟糕

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-25
        • 2012-03-21
        • 2023-03-04
        • 1970-01-01
        • 2017-02-05
        • 2020-03-10
        相关资源
        最近更新 更多