【问题标题】:Ant local property creation from a propertyfile从属性文件创建 Ant 本地属性
【发布时间】:2014-03-01 21:56:29
【问题描述】:

我知道,因为Ant 1.8local property 可以用于当前范围。

就我而言,我需要从属性文件加载属性,并且我需要这些属性是本地的。比如我的属性文件:

param1=value1
param2=value2
param3=value3
.
.
paramN=valueN

我想在每个目标上加载此属性文件,并希望将这些属性保留在该目标的本地。

我怎样才能实现它?

【问题讨论】:

    标签: java ant build build-process ant-contrib


    【解决方案1】:

    如果您不知道所有属性和/或不想用<local/> 枚举所有属性,我看到的唯一解决方案是在目标内使用嵌套<antcall/> 来执行属性加载并将它们保存在本地 ant 上下文中(一旦 ant 调用完成,在其中创建的所有属性都将丢失,您无法从 ant 调用方获取它们)。

    【讨论】:

    • 属性在 Ant 中是不可变的。那么这种方法真的会奏效吗。
    • 是的,它们在上下文中是不可变的。 <antcall />(和<ant />)创建一个新的子上下文(可以继承或不继承父上下文)。您可以对其进行测试以说服自己:)
    • 很高兴知道 opatry。现在尝试:-)
    • antcall 和 ant task 不会创建新的子上下文,而是创建一个全新的项目范围 - 过度使用会减慢您的构建速度。 Antcall 自 Ant 1.6 以来已过时,应避免使用。有关详细信息,请参阅 pjug.org/docs/ant.pdfbuild-doctor.com/2008/03/13/antcall-is-evil
    【解决方案2】:

    由于本地任务仅适用于单个属性,您可以将其扩展为适用于从属性文件加载的一堆属性。 Antelope project(一些 Antelope Ant tasks 现在是 antcontrib 的一部分,但计划中的合并从未完成..)有一个名为 unset 的类似任务,它需要一个属性,但也有一个属性文件 - 检查它的来源灵感(来源包含在发布 zip 中)。或者使用 Antelope 未设置任务(它不依赖于其他 Antelope 类)来创建一个范围:

    <target name="foo">
    <!-- loaded when target starts.. -->
    <property file="foo.properties"/>
    ...
    <!-- ..destroyed when target ends -->
    <unset file="foo.properties/>
    </target>
    

    【讨论】:

      猜你喜欢
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 2011-05-09
      • 2012-07-06
      • 2014-10-29
      • 2015-09-08
      相关资源
      最近更新 更多