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

use*_*650 25 java ant

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

  1. 一个build.properties文件.该文件包含一条信息:on=1

  2. 一个ant.xml文件.该文件包含我的构建说明.

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

Per*_*ion 22

这应该是您需要做的所有事情:

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

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

<property file="build.properties"/>
Run Code Online (Sandbox Code Playgroud)

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

<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

<property file="build.properties" prefix="uniqueprefix"/>
Run Code Online (Sandbox Code Playgroud)

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

<equals arg1="${uniqueprefix.on}" arg2="1" />
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*iel 5

如果您不想编写自己的 Ant 任务或使用其他库,只需“干净”的 ant,请看一下这个:

mybuild.properties:

on=on
Run Code Online (Sandbox Code Playgroud)

使用 on 或 true 或类似的东西,1 不起作用。

构建.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>
Run Code Online (Sandbox Code Playgroud)


And*_*s_D 0

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

  1. 读取属性文件(位置/名称可以作为属性传递给任务)
  2. 将 的值分配on给 ant 属性

然后您可以使用该 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你需要一些<taskdef>,仅此而已。