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
}
有什么帮助或指点吗

正如您在for
TaskOutputs
中看到的,只有文件可以注册为输出-因此此处没有属性

当谈到
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这就是你要找的吗?