Как сделать это правило makefile (4) в ant (1)? - PullRequest
4 голосов
/ 01 июля 2010

Я хотел бы знать, как сделать что-то в ant (1), что эквивалентно определенному правилу makefile (4). Правило makefile (4) выполняет следующие действия: 1) запускает процесс, который не завершается и записывает одну строку в свой стандартный поток вывода; 2) читает строку из процесса; 3) создает файл, используя строку; и 4) запускает второй процесс, который не прекращает использование файла в качестве аргумента. Схематически, правило makefile (4) имеет вид

program1 | while read arg; do \
    echo $$arg >file; \
    program2 file; \
done

ПРИМЕЧАНИЕ: «программа1» записывает одну строку; ни "program1", ни "program2" не завершаются.

Как это можно сделать в муравье (1)?

1 Ответ

1 голос
/ 08 августа 2010

Вы должны иметь возможность использовать ProcessBuilder, как указано ниже:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class PBTest {

    public static void main(String[] args) {
        ProcessBuilder pb = new ProcessBuilder("process1");
        pb.redirectErrorStream(true);
        try {
            Process p = pb.start();
            String s;
            // read from the process's combined stdout & stderr
            BufferedReader stdout = new BufferedReader (
                new InputStreamReader(p.getInputStream()));
            if ((s = stdout.readLine()) != null) {
                ProcessBuilder pb2 = new ProcessBuilder("process2", s);
                pb2.start();
                ...
            }
            System.out.println("Exit value: " + p.waitFor());
            p.getInputStream().close();
            p.getOutputStream().close();
            p.getErrorStream().close();
         } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Тогда ваша задача java будет довольно простой:

<!-- Run the program -->
<target name="run">
    <java classname="PBTest" fork="true"></java> 
</target>

Приложение:

Я ищу решение в ant (1), а не в Java.

Вы можете использовать любой Apache BSF или JSR223 поддерживаемых языка в script task.Я не вижу способа использовать стандартный ввод и вывод напрямую, но вы можете использовать loadfile task для загрузки свойства из файла.Вот пример , который получает номер версии из исходного файла.

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