运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

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

运维开发网 https://www.qedev.com 2020-05-10 09:34 出处:网络 作者:运维开发网整理
我想知道如何在ant(1)中做一些等同于特定makefile(4)规则的东西. makefile(4)规则执行以下操作:1)启动一个不终止的进程,并将一行写入其标准输出流; 2)从过程中读取行; 3)使用该行构造文件; 4)启动第二个进程,该进程不使用该文件作为参数终止.原理上,makefile(4)规则是 program1 | while read arg; do \ echo $$ar
我想知道如何在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)中完成?

您应该能够使用如下所述的 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>

附录:

I’m looking for a solution in ant(1) rather than Java.

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

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消