【问题标题】:How to do this makefile(4) rule in ant(1)?如何在 ant(1) 中执行 makefile(4) 规则?
【发布时间】:2010-08-09 01:59:34
【问题描述】:

我想知道如何在 ant(1) 中执行与特定 makefile(4) 规则等效的操作。 makefile(4) 规则执行以下操作: 1) 启动一个不会终止的进程,并将一行写入其标准输出流; 2) 从进程中读取行; 3) 使用该行构造一个文件;和 4) 使用文件作为参数启动不终止的第二个进程。从示意图上看,makefile(4) 规则是

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

注意:“program1”写一行; “program1”和“program2”都不会终止。

在 ant(1) 中如何做到这一点?

【问题讨论】:

    标签: ant makefile


    【解决方案1】:

    您应该可以使用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 中的解决方案。

    您可以在script task 中使用任何 Apache BSF 或 JSR 223 支持的语言。我没有看到直接使用标准输入和输出的方法,但您可以使用loadfile task 从文件加载属性。这是一个从源文件中获取版本号的example

    【讨论】:

    • @Pourquoi Litytestdata:谢谢!
    • @Pourquoi Litytestdata 感谢您的回答,但是,正如我的问题所示,我正在寻找 ant(1) 而不是 Java 的解决方案。
    • @Steve Emmerson:我在上面提出了一些其他的可能性。
    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    相关资源
    最近更新 更多