Java 如何在Groovy中读取另一个进程写入的(prinln)文件
我正在构建运行Tomcat的Gradle脚本(遗憾的是我不能使用Gretty或Cargo插件)。启动Tomcat(Java 如何在Groovy中读取另一个进程写入的(prinln)文件,java,groovy,gradle,Java,Groovy,Gradle,我正在构建运行Tomcat的Gradle脚本(遗憾的是我不能使用Gretty或Cargo插件)。启动Tomcat($Tomcat_HOME/bin/startup.sh)后,我想在Gradle/Groovy中打开文件,然后打印所有输入的行,换句话说:打开文件,跟踪smt new是否出现,打印它 现在我的任务是这样的: task startTomcat(dependsOn: ...) << { def catalinaOut = "${project.TOMCAT_HOME}/
$Tomcat_HOME/bin/startup.sh
)后,我想在Gradle/Groovy中打开文件,然后打印所有输入的行,换句话说:打开文件,跟踪smt new是否出现,打印它
现在我的任务是这样的:
task startTomcat(dependsOn: ...) << {
def catalinaOut = "${project.TOMCAT_HOME}/logs/catalina.out"
delete { catalinaOut }
exec {
workingDir '.'
executable "${project.TOMCAT_HOME}/bin/${tomcatStartScript()}"
environment CATALINA_OPTS: tomcatArgs.join(' ')
}
new File(catalinaOut).eachLine { line -> println(line) }
}
task startTomcat(dependsOn:…)println(line)}
}
当然,它不会工作,因为
新文件
会打开并立即关闭文件 您要寻找的基本上是unix上的tail-f
的行为。因此,处理此问题的一个显而易见的方法就是调用此工具(例如,['tail','-f',''].execute()
)
否则就有几个答案
这是一个简单的例子,使用:
buildscript{
repositories.jcenter()
依赖关系{
类路径“commons io:commons io:2.4”
}
}
任务tail println l}]作为org.apache.commons.io.input.TailerListenerAdapter
)
试一试{
tailer.run()
}
最后{
tailer.stop()
}
}
使用gradletail
运行,并将行添加到提到的文件/tmp/mylog
。使用CTRL-C
停止
buildscript {
repositories.jcenter()
dependencies {
classpath 'commons-io:commons-io:2.4'
}
}
task tail << {
def tailer = new org.apache.commons.io.input.Tailer(
"/tmp/mylog" as File,
[handle: { String l -> println l }] as org.apache.commons.io.input.TailerListenerAdapter
)
try {
tailer.run()
}
finally {
tailer.stop()
}
}