Подтвердить что ты не робот

Чтение из файла .properties в Ant build.xml

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

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

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

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

4b9b3361

Ответ 1

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

1.Загрузите последнюю версию ant-contrib JAR и поместите в lib  папку вашей установки Ant.

2.Вставьте свои свойства в свой сборник script

<property file="build.properties"/>

3. Добавьте следующую запись taskdef в свою сборку script

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

Ответ 2

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

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

Сообщите мне, если вы хотите пояснить подробные сведения.

Ответ 3

Если вы не хотите писать свою собственную задачу 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>

Ответ 5

Подход, который выглядит сложным, но на самом деле довольно легким: напишите пользовательскую задачу ant (один простой Java-класс и 20 строк кода). Задача будет

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

Тогда вам понадобится <taskdef> и что он.