Ant exec任务并使用一些ksh脚本进行检查

Ant exec任务并使用一些ksh脚本进行检查,ant,Ant,我在使用Ant时遇到了一个问题 我想检查一个长过程的结束,而不使用讨厌的命令 在我的蚂蚁目标中,我正在发射 <exec executable="my long process" /> 当grep返回某个内容时,意味着我的进程已经结束(因为check ksh脚本在线输出) 如何在Ant中执行相同的签入 我正在尝试使用以下类似的东西(来模拟watch命令) //在这里做点什么来检查“在线” 但是我不知道在中放什么,Ant有很多方法可以执行检查脚本,然后测试其输出,但是它不能适应只接

我在使用Ant时遇到了一个问题

我想检查一个长过程的结束,而不使用讨厌的
命令

在我的蚂蚁目标中,我正在发射

<exec executable="my long process" />
当grep返回某个内容时,意味着我的进程已经结束(因为check ksh脚本在线输出)

如何在Ant中执行相同的签入

我正在尝试使用以下类似的东西(来模拟watch命令)


//在这里做点什么来检查“在线”

但是我不知道在

中放什么,Ant有很多方法可以执行检查脚本,然后测试其输出,但是它不能适应只接受一个条件的
waitfor
任务

不过,您可以尝试使用脚本。 见:

应该是这样的:

<scriptcondition language="javascript" value="true">
    var p = java.lang.Runtime.getRuntime().exec("ksh check");
    p.waitFor();
    var reader = new java.io.InputStreamReader(p.getInputStream());
    var out = org.apache.tools.ant.util.FileUtils.safeReadFully(reader);
    self.setValue(out.contains("ONLINE"));
</scriptcondition>

var p=java.lang.Runtime.getRuntime().exec(“ksh检查”);
p、 waitFor();
var reader=newjava.io.InputStreamReader(p.getInputStream());
var out=org.apache.tools.ant.util.FileUtils.safeReadFully(reader);
self.setValue(out.contains(“在线”));

是否“漫长的过程”以0这样的退出值结束?如果是这样,则当waitfor块中的属性值更改时,在exec和test中使用resultproperty。从文档中可以看出,您似乎无法在exec之前设置属性,然后在waitfor条件中使用“isset”测试。不幸的是,没有。这个漫长的过程要求启动其他几个过程。我可以用“check ksh scrpt”检查他们是否在线,当被调用时输出“离线”或“在线”。您可以详细说明为什么“不能满足只接受一个条件的waitfor任务”吗?根据文档,该文件在a中工作。在问题的“//do somethine here”部分,这种方法似乎有效。
waitfor
只需要一个条件。在您的用例中,您至少需要一个exec任务和一个条件。这两种方法都不适用于
waitfor
。执行脚本条件会得到“javax.script.ScriptException:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:“未定义运行时”。我添加了BSF-2.4.0.jar、commons-logging-1.1.2.jar和js.jar(rhino1_7R4)但是我仍然得到org.mozilla.javascript.EcmaError:ReferenceError:Runtime没有定义。好的,问题是Runtime没有“导入”,所以我编写了java.lang.Runtime.getRuntime().exec(…)。但现在我有了:Java类“Java.io.InputStreamReader”没有名为“InputStreamReader”的公共实例字段或方法,这很奇怪,因为InputStreamReader类中有一个构造函数InputStreamReader(Inputstream)
<exec executable="my long process" />
<waitfor maxwait="2" maxwaitunit="minute" checkevery="5" checkeveryunit="second">
    // do something here to check "ONLINE"
</waitfor>
<scriptcondition language="javascript" value="true">
    var p = java.lang.Runtime.getRuntime().exec("ksh check");
    p.waitFor();
    var reader = new java.io.InputStreamReader(p.getInputStream());
    var out = org.apache.tools.ant.util.FileUtils.safeReadFully(reader);
    self.setValue(out.contains("ONLINE"));
</scriptcondition>