当前位置: 首页 > 知识库问答 >
问题:

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

山凌
2023-03-14

我有一个包含多个属性的属性文件。多个对多个(我们的)产品有效,有些只对一个产品有效(不能通过属性名称区分)。因此,在一个产品基于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帮助程序类?

共有1个答案

於子晋
2023-03-14

您也许可以将此作为“普通蚂蚁”的起点,并根据您的需要进行调整。

这里的假设是,您希望一次处理一个产品,并给定产品编号,将该产品的属性加载到当前构建中。

方法是实现一个宏来完成这个任务。提供的属性是属性文件名和产品号。宏读取文件两次,提取公共部分,然后提取特定于产品的部分,然后将它们连接起来并作为Ant属性加载。

例如,您可以调整此宏,以获取产品所需的文件代码段并写出特定于产品的属性文件(使用 Ant

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

 类似资料:
  • 问题内容: 我正在使用eclipse使用ant构建耳朵文件。我正在使用oc4j,并且我想确保在构建中包含orion- application.xml。我当前正在使用但不起作用的是: 将其添加到耳朵的正确方法是什么? 问题答案: 蚂蚁EAR任务 应通过嵌套文件集指定应放入文件夹的所有内容:

  • 项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时

  • 问题内容: 我正在尝试从容器访问二进制ed 。当我使用它时,但是找不到我使用它时。 复制的最小步骤: 1.创建Dockerfile.test 构建并运行。这可行。 docker build . -t migrate_test -f Dockerfile.test docker run –name migrate_test migrate_test:latest Usage: migrate OPT

  • 问题内容: 我使用以下bash脚本仅复制某些扩展名的文件(在本例中为* .sh),但是仍会复制所有文件。怎么了? 问题答案: 我认为过去是用来包含文件的子集,否则会被排除,而不仅仅是包括那些文件。换句话说:您必须考虑 包含 含义 ,不要排除 。 请尝试: 对于rsync 3.0.6或更高版本,需要按以下方式修改顺序(请参见注释): 添加该标志将避免在目标位置创建空目录结构。在3.1.2版中测试。

  • 问题内容: 假设我的jar包“ com.test.io”中有一个名为test.txt的文件。 我将如何编写一个类来检索此文本文件,然后将内容复制到文件系统上的新文件中? 问题答案: 假设jar在您的类路径中: