java - ANT:复制文本文件的某些部分

标签 java ant

我有一个包含多个属性的属性文件。多个对多个(我们的)产品有效,有些仅对一种产品有效(无法通过属性名称区分)。因此,在一个产品的基于 ANT 的构建过程中,我想将包含所有属性的原始文件复制到特定于产品的文件,从而跳过适用于其他产品的部分。我可以想象使用一些开始和结束标记,例如

foo.bar=hello

# begin-product1
foo.bazz=world
# end-product1

# begin-product2
woohoo.bart=bla-bla
# end-product2

对于产品 1,我想要获取文件

foo.bar=hello

foo.bazz=world

对于产品 2

foo.bar=hello

woohoo.bart=bla-bla

ANT 可以实现类似的功能吗?还是我应该编写自己的 Java 帮助器类?

最佳答案

您也许可以将其用作“vanilla Ant”起点,并进行调整以满足您的需求。

此处假设您希望一次处理一个产品,并给定产品编号,将该产品的属性加载到当前版本中。

该方法是实现 macro就是这样做的。提供的属性是属性文件名称和产品编号。该宏读取文件两次,提取公共(public)部分,然后提取产品特定部分,然后将它们连接起来并作为 Ant 属性加载。

您可以调整此宏,例如获取产品所需的文件片段并写出特定于产品的属性文件(使用 Ant <echo> 任务)。如果需要,分隔各个部分的字符串也可以抽象为宏的属性或参数。在示例中,我已将开始/结束标记包含在传递到 <loadproperties> 的产品特定字符串中。任务。

<macrodef name="loadProductProperties">
  <attribute name="propertiesFile" />
  <attribute name="product" />

  <sequential>
    <local name="config.common" />
    <local name="config.product" />

    <loadfile property="config.common" srcFile="@{propertiesFile}">
      <filterchain>
        <tokenfilter>
          <filetokenizer/>
             <replaceregex pattern="^(.*?)# begin-product.*" replace="\1" flags="s" />
        </tokenfilter>
      </filterchain>
    </loadfile>

    <loadfile property="config.product" srcFile="props.txt">
      <filterchain>
        <tokenfilter>
          <filetokenizer/>
             <replaceregex
                pattern="^.*(# begin-product@{product}\b.*?# end-product@{product}\b).*"
                replace="\1" flags="s" />
        </tokenfilter>
      </filterchain>
    </loadfile>

    <loadproperties>
        <string value="${config.common}${config.product}" />
    </loadproperties>
  </sequential>
</macrodef>

<loadProductProperties propertiesFile="props.txt" product="2" />

关于java - ANT:复制文本文件的某些部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41116723/

相关文章:

java - 获取 (int,int) 参数以接受 (int, array) 输入

java - 如果 RxJava observable 需要很长时间,你如何显示微调器?

java - 相当于 Java 世界中的 "make install"

java - 将 Eclipse 项目划分为几个模块后,构建性能下降

linux - Ant 构建在 Linux 机器上失败

java - 在 Zxing 中启用 PDF417 解码

java - 如何在kubernetes-client-java中创建Ingress Controller

java - 使用 JDBC 在 java 中设置用户身份验证

java - 内容 - 处置 header 无法正常工作

Ant - 用 mxmlc 和 compc 替换 fb.exportReleaseBuild