8
votes

Exécutez la tâche JavaExec en arrière-plan puis terminer lors de la construction complète

J'essaie de déterminer comment lancer une tâche JavaExec qui aboutit à un serveur de jetty sans bloquer les tâches ultérieures. De plus, je devrai terminer ce serveur après la fin de la construction. Aucune idée de la façon dont je peux faire cela?


0 commentaires

5 Réponses :


1
votes

Vous ne pouvez pas le faire avec JavaExec ; Vous devrez écrire votre propre tâche.


2 commentaires

Il est regrettable que cette tâche ne soit pas plus flexible. Existe-t-il des plans pour permettre aux tâches de JavaExec d'exécuter des processus JVM de fond?


Je suis à peu près sûr qu'il y a un problème pour cela. Les demandes de tir sont les bienvenues.



1
votes

J'espère que cet extrait vous donnera un aperçu de la façon dont cela peut être fait.

Vous pouvez utiliser Catégorier les fermetures d'écouteurs pour exécuter le code lors de la construction / finition. Cependant, pour une raison quelconque, gradle.buildstarté ne fonctionne pas dans MILESTONE-3, donc je l'ai remplacé par gradle.takgraph.quiReady qui fait l'affaire.

alors vous pouvez appeler la tâche runJetty à l'aide de la tâche EXECUTE () (Remarque, cette API n'est pas officielle et peut disparaître). à partir d'un exécuteurservice pour obtenir un comportement asynchrone. xxx


1 commentaires

Malheureusement, le plugin de jetty pour gradle n'est pas terriblement utile pour les configurations qui ne sont pas simples de la saleté. Donc, je règle l'utilisation de cela pour mon projet. Actuellement, je peux démarrer mon serveur de jetty très facilement à partir de Java et je ne peux pas facilement faire cela à partir du plugin des grades sans messager avec XML. Je ne veux vraiment pas faire ça.



5
votes

Je sais que le fil est de 2011, mais je suis toujours tombé sur le problème. Alors voici une solution qui travaille avec la gradle 2.14:

import java.util.concurrent.Callable
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors    

class RunAsyncTask extends DefaultTask {
    String taskToExecute = '<YourTask>'
    @TaskAction
    def startAsync() {
        ExecutorService es = Executors.newSingleThreadExecutor()
        es.submit({taskToExecute.execute()} as Callable)
    }
}


task runRegistry(type: RunAsyncTask, dependsOn: build){
    taskToExecute = '<NameOfYourTaskHere>'
}


0 commentaires

4
votes

i Solution mise à jour de @chrishuen car vous ne pouvez plus appeler exécuter sur la tâche. Voici mon build.gradle xxx


0 commentaires

0
votes

Basé sur les réponses précédentes, voici ma prise: xxx


0 commentaires