Gradle任务:打开用作TaskInput的端口
希望有一个任务的输入和输出取决于一个开放的端口 大概是Gradle任务:打开用作TaskInput的端口,gradle,Gradle,希望有一个任务的输入和输出取决于一个开放的端口 大概是 ext { serverReady checkPortOpen() } task MyTask { inputs.property ext.serverReady outputs.property ext.serverReady } 有什么帮助或指点吗 正如您在forTaskOutputs中看到的,只有文件可以注册为输出-因此此处没有属性 当谈到TaskInputs时,确实可以使用属性,您可以在“$GRADLE_HOME/s
ext {
serverReady checkPortOpen()
}
task MyTask {
inputs.property ext.serverReady
outputs.property ext.serverReady
}
有什么帮助或指点吗 正如您在forTaskOutputs
中看到的,只有文件可以注册为输出-因此此处没有属性
当谈到TaskInputs时,确实可以使用属性,您可以在“$GRADLE_HOME/samples/userguide/tasks/incrementalTask”下找到一个很好的示例。尝试运行:
gradle incrementalReverse -PtaskInputProperty=<property>
gradle incrementalReverse-PtaskInputProperty=
连续多次传递相同的
,然后更改。这可能就是你要找的。是良好属性的要求(例如可序列化
)。似乎您可以将端口的状态包装在属性中,并将其用作@Input
正如gradle文档中@Opal所指出的,有一个outputs.Update可以完美地完成这项工作
在运行完整的测试套件之前,我需要启动一些服务,因此我有一个:
class BaseServiceTask extends com.github.jengelman.gradle.plugins.processes.tasks.JavaFork {
def BaseServiceTask() {
super()
classpath project.configurations.all
args ["-user","user","-password","password","-env","mydevenv"]
}
}
task startServer (type:BaseServiceTask) {
main = "com.nico.StartServer"
jvmArgs += ["-Xmx8096m","-XX:MaxPermSize=256m"] // give more memory to data server
outputs.upToDateWhen { checkSocket(servicePort) }
doLast {waitForSocket(servicePort)}
}
下面的细节
def checkSocket(portS) {
try {
new Socket("localhost", portS.toInteger())
return true
} catch (Exception e) {
return false
// throw new GradleScriptException("Required ${portS} is closed", e )
}
}
def waitForSocket(portS) {
while(!checkSocket(portS)) {
println "Waiting on ${portS}"
Thread.sleep(5000)
}
}
最后,在运行相关的gradle任务时,输出应正确显示最新状态:
:startServer UP-TO-DATE
根据我的理解,输出和输入属性似乎只是文件。我急切地等待你的问题的答案。你认为什么时候可能?这取决于目的到底是什么,但更确切地说是的。@NicolasModrzyk这就是你要找的吗?