Чтение из файла .properties в Ant build.xml - PullRequest
23 голосов
/ 13 июля 2011

Мне нужна помощь с использованием файлов свойств Ant. У меня есть следующее:

  1. A build.properties файл. Этот файл содержит один кусок информация: on=1

  2. Файл ant.xml. Этот файл содержит мои инструкции по сборке.

Я хочу прочитать атрибут on из моего файла свойств, и если значение 1, я хочу выполнить задачу в моем файле сборки. В противном случае я хочу, чтобы это ничего не делало. Кто-нибудь может подсказать мне, как этого добиться?

Ответы [ 4 ]

22 голосов
/ 13 июля 2011

Это должно быть все, что вам нужно сделать:

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 не сможет автоматически найти его, учитывая имя, которое вы использовали.Удачи.

4 голосов
/ 13 июля 2011

Если вы не хотите писать собственную задачу Ant или использовать другие библиотеки, просто «очистите» ant, посмотрите на это:

mybuild.properties:

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>
4 голосов
/ 13 июля 2011

Мне кажется, что вы хотите реализовать что-то похожее на приведенное ниже задание.

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

Дайте мне знать, если вам нужно подробное объяснение.

0 голосов
/ 13 июля 2011

Подход, который выглядит сложным, но на самом деле довольно легким: написать специальную задачу муравья (один простой класс Java, <20 строк кода).Задача </p>

  1. прочитает файл свойств (местоположение / имя может быть передано как атрибут задачи)
  2. присвоит значение on свойству 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> и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...