代码之家  ›  专栏  ›  技术社区  ›  Steve Emmerson

如何在ant(1)中执行这个makefile(4)规则?

  •  4
  • Steve Emmerson  · 技术社区  · 16 年前

    我想知道如何在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)中如何做到这一点?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    你应该可以使用 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 . 我看不到直接使用标准输入和输出的方法,但是您可以使用 loadfile task 从文件加载属性。这是一个 example 从源文件中获取版本号的。

    推荐文章