从Ant build.xml中的.properties文件中读取

时间:2011-07-13 12:42:24

标签: java ant

我需要一些使用Ant的属性文件的帮助。我有以下内容:

  1. build.properties 文件。这个文件包含一个 信息:on=1

  2. ant.xml文件。此文件包含我的构建说明。

  3. 我想从我的属性文件中读取on属性,如果值为1,我想在构建文件中执行任务。否则我希望它什么都不做。任何人都可以指导我如何实现这个目标吗?

4 个答案:

答案 0 :(得分:22)

这应该是你需要做的全部:

1.获取最新版本的ant-contrib JAR并放入lib    Ant安装的文件夹。

2.在构建脚本中包含您的属性

<property file="build.properties"/>

3.将以下taskdef条目添加到构建脚本

<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>

4.然后最后,定义一个if任务,如下:

<if>
 <equals arg1="${on}" arg2="1" />
 <then>
   <echo message="I am going to do something here" />
 </then>
 <else>
   <echo message="I am going to do nothing" />
 </else>
</if>

请注意,您可以为从属性文件导入的属性添加标识符。例如,您可以像这样进行导入:

<property file="build.properties" prefix="uniqueprefix"/>

然后你会在你的文件中引用'uniqueprefix.on',而不只是'on'。

<equals arg1="${uniqueprefix.on}" arg2="1" />

你可以使用Ant内置的条件任务,但我觉得如果你需要它,你最好使用ant-contrib为表带来的额外功能。另外,请注意其标准,将构建文件命名为“ build.xml ”,而不是“ ant.xml ”。实际上,根据您使用的名称,Ant将无法自动找到它。祝你好运。

答案 1 :(得分:4)

在我看来,你想要实现类似于以下给定任务的东西。

<property file="build.properties" />



<target name="default" description="Homeworks">
    <condition property="on">
        <equals arg1="{on}" arg2="1" />
    </condition>
    <antcall target="taska" />
    <antcall target="taskb" />
</target>

<target name="taska" if="on">
    <echo message="Testing task one" />
</target>
<target name="taskb" unless="on">
    <echo message="Testing task two" />
</target>

如果您想详细解释,请告诉我。

答案 2 :(得分:4)

如果您不想编写自己的Ant任务或使用其他库,只需“清理”蚂蚁,看看这个:

mybuild.properties:

on=on

使用on或true或类似的东西,1将无效。

的build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default">
    <property file="mybuild.properties"/>    

    <target name="default" depends="on, off" description="description">
        <echo>default</echo>
    </target>

    <target name="on" if="${on}">
      <echo>on</echo>
    </target>

    <target name="off" unless="${on}">
      <echo>off</echo>
    </target>
</project>

答案 3 :(得分:0)

一种看似困难但实际上非常简单的方法:编写一个自定义的ant任务(一个简单的java类,&lt; 20行代码)。任务将

  1. 读取属性文件(位置/名称可以作为属性传递给任务)
  2. on的值分配给ant属性
  3. 然后您可以将该ant属性用于流量控制。

    public class MyOwnTask extends Task {
    
      private String filename = "build.properties"; // some default value
    
      public void setFilename(String filename) {
        this.filename = filename;
      }
    
      public void execute() {   // the "main" method
        Properties p = new Properties();
        p.load(filename);
        String onValue = p.get("on");
        getProject().setProperty("ON_PROPERTY", onValue);
      }
    }
    

    然后你需要一些<taskdef>,就是这样。