Partie 2 : Créer un projet de plugin¶
Traduction assistée par IA - en savoir plus et suggérer des améliorations
Vous avez vu comment les plugins étendent Nextflow avec des fonctionnalités réutilisables. Vous allez maintenant créer le vôtre, en partant d'un modèle de projet qui gère la configuration de build pour vous.
Vous commencez ici ?
Si vous rejoignez le cours à cette partie, copiez la solution de la Partie 1 pour l'utiliser comme point de départ :
Documentation officielle
Cette section et celles qui suivent couvrent les éléments essentiels du développement de plugins. Pour des détails complets, consultez la documentation officielle de développement de plugins Nextflow.
1. Créer le projet de plugin¶
La commande intégrée nextflow plugin create génère un projet de plugin complet :
Plugin created successfully at path: /workspaces/training/side-quests/plugin_development/nf-greeting
Le premier argument est le nom du plugin, et le second est le nom de votre organisation (utilisé pour organiser le code généré dans des répertoires).
Création manuelle
Vous pouvez également créer des projets de plugins manuellement ou utiliser le modèle nf-hello sur GitHub comme point de départ.
2. Examiner la structure du projet¶
Un plugin Nextflow est un logiciel Groovy qui s'exécute à l'intérieur de Nextflow. Il étend les capacités de Nextflow en utilisant des points d'intégration bien définis, ce qui lui permet de fonctionner avec les fonctionnalités de Nextflow telles que les canaux, les processus et la configuration.
Avant d'écrire du code, examinez ce que le modèle a généré afin de savoir où placer les différents éléments.
Placez-vous dans le répertoire du plugin :
Listez le contenu :
Vous devriez voir :
.
├── build.gradle
├── COPYING
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── Makefile
├── README.md
├── settings.gradle
└── src
├── main
│ └── groovy
│ └── training
│ └── plugin
│ ├── GreetingExtension.groovy
│ ├── GreetingFactory.groovy
│ ├── GreetingObserver.groovy
│ └── GreetingPlugin.groovy
└── test
└── groovy
└── training
└── plugin
└── GreetingObserverTest.groovy
11 directories, 13 files
3. Explorer la configuration de build¶
Un plugin Nextflow est un logiciel basé sur Java qui doit être compilé et packagé avant que Nextflow puisse l'utiliser. Cela nécessite un outil de build.
Gradle est un outil de build qui compile le code, exécute les tests et package les logiciels.
Le modèle de plugin inclut un wrapper Gradle (./gradlew) afin que vous n'ayez pas besoin d'installer Gradle séparément.
La configuration de build indique à Gradle comment compiler votre plugin et indique à Nextflow comment le charger. Deux fichiers sont particulièrement importants.
3.1. settings.gradle¶
Ce fichier identifie le projet :
Le nom ici doit correspondre à ce que vous indiquerez dans nextflow.config lors de l'utilisation du plugin.
3.2. build.gradle¶
Le fichier de build est l'endroit où la plupart de la configuration se produit :
Le fichier contient plusieurs sections.
La plus importante est le bloc nextflowPlugin :
plugins {
id 'io.nextflow.nextflow-plugin' version '1.0.0-beta.10'
}
version = '0.1.0'
nextflowPlugin {
nextflowVersion = '24.10.0' // (1)!
provider = 'training' // (2)!
className = 'training.plugin.GreetingPlugin' // (3)!
extensionPoints = [ // (4)!
'training.plugin.GreetingExtension',
'training.plugin.GreetingFactory'
]
}
nextflowVersion: Version minimale de Nextflow requiseprovider: Votre nom ou celui de votre organisationclassName: La classe principale du plugin, le point d'entrée que Nextflow charge en premierextensionPoints: Les classes qui ajoutent des fonctionnalités à Nextflow (vos fonctions, la surveillance, etc.)
Le bloc nextflowPlugin configure :
nextflowVersion: Version minimale de Nextflow requiseprovider: Votre nom ou celui de votre organisationclassName: La classe principale du plugin (le point d'entrée que Nextflow charge en premier, spécifié dansbuild.gradle)extensionPoints: Les classes qui ajoutent des fonctionnalités à Nextflow (vos fonctions, la surveillance, etc.)
3.3. Mettre à jour nextflowVersion¶
Le modèle génère une valeur nextflowVersion qui peut être obsolète.
Mettez-la à jour pour qu'elle corresponde à votre version de Nextflow installée afin d'assurer une compatibilité complète :
4. Connaître les fichiers source¶
Le code source du plugin se trouve dans src/main/groovy/training/plugin/.
Il y a quatre fichiers source, chacun ayant un rôle distinct :
| Fichier | Rôle | Modifié dans |
|---|---|---|
GreetingPlugin.groovy |
Point d'entrée que Nextflow charge en premier | Jamais (généré) |
GreetingExtension.groovy |
Définit les fonctions appelables depuis les workflows | Partie 3 |
GreetingFactory.groovy |
Crée des instances d'observateur au démarrage d'un workflow | Partie 5 |
GreetingObserver.groovy |
Exécute du code en réponse aux événements du cycle de vie du workflow | Partie 5 |
Chaque fichier est présenté en détail dans la partie indiquée ci-dessus, au moment où vous le modifiez pour la première fois. Les principaux à connaître :
GreetingPluginest le point d'entrée que Nextflow chargeGreetingExtensionfournit les fonctions que ce plugin met à disposition des workflowsGreetingObservers'exécute en parallèle du pipeline et répond aux événements sans nécessiter de modifications du code du pipeline
graph TD
A[GreetingPlugin] -->|registers| B[GreetingExtension]
A -->|registers| C[GreetingFactory]
C -->|creates| D[GreetingObserver]
B -->|provides| E["@Function methods<br/>(callable from workflows)"]
D -->|hooks into| F["Lifecycle events<br/>(onFlowCreate, onProcessComplete, etc.)"]
style A fill:#e1f5fe
style B fill:#fff3e0
style C fill:#fff3e0
style D fill:#fff3e0
5. Compiler, installer et exécuter¶
Le modèle inclut du code fonctionnel prêt à l'emploi, vous pouvez donc le compiler et l'exécuter immédiatement pour vérifier que le projet est correctement configuré.
Compilez le plugin et installez-le localement :
make install compile le code du plugin et le copie dans votre répertoire local de plugins Nextflow ($NXF_HOME/plugins/), le rendant disponible à l'utilisation.
Sortie du build
La première fois que vous exécutez cette commande, Gradle se téléchargera lui-même (cela peut prendre une minute) :
Downloading https://services.gradle.org/distributions/gradle-8.14-bin.zip
...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Welcome to Gradle 8.14!
...
Deprecated Gradle features were used in this build...
BUILD SUCCESSFUL in 23s
5 actionable tasks: 5 executed
Les avertissements sont attendus.
- "Downloading gradle..." : Cela ne se produit que la première fois. Les builds suivants sont beaucoup plus rapides.
- "Deprecated Gradle features..." : Cet avertissement provient du modèle de plugin, pas de votre code. Vous pouvez l'ignorer en toute sécurité.
- "BUILD SUCCESSFUL" : C'est ce qui compte. Votre plugin a été compilé sans erreurs.
Retournez dans le répertoire du pipeline :
Ajoutez le plugin nf-greeting à nextflow.config :
Version requise pour les plugins locaux
Lors de l'utilisation de plugins installés localement, vous devez spécifier la version (par exemple, nf-greeting@0.1.0).
Les plugins publiés dans le registre peuvent utiliser uniquement le nom.
Exécutez le pipeline :
L'option -ansi-log false désactive l'affichage animé de la progression afin que toutes les sorties, y compris les messages de l'observateur, soient affichées dans l'ordre.
Pipeline is starting! 🚀
[bc/f10449] Submitted process > SAY_HELLO (1)
[9a/f7bcb2] Submitted process > SAY_HELLO (2)
[6c/aff748] Submitted process > SAY_HELLO (3)
[de/8937ef] Submitted process > SAY_HELLO (4)
[98/c9a7d6] Submitted process > SAY_HELLO (5)
Output: Bonjour
Output: Hello
Output: Holà
Output: Ciao
Output: Hallo
Pipeline complete! 👋
(L'ordre de votre sortie et les hachages des répertoires de travail seront différents.)
Les messages "Pipeline is starting !" et "Pipeline complete !" vous semblent familiers depuis le plugin nf-hello de la Partie 1, mais cette fois ils proviennent du GreetingObserver de votre propre plugin.
Le pipeline lui-même est inchangé ; l'observateur s'exécute automatiquement car il est enregistré dans la factory.
À retenir¶
Vous avez appris que :
- La commande
nextflow plugin creategénère un projet de démarrage complet build.gradleconfigure les métadonnées du plugin, les dépendances et les classes qui fournissent des fonctionnalités- Le plugin comporte quatre composants principaux : Plugin (point d'entrée), Extension (fonctions), Factory (crée les moniteurs) et Observer (répond aux événements du workflow)
- Le cycle de développement est le suivant : modifier le code,
make install, exécuter le pipeline
Et ensuite ?¶
Vous allez maintenant implémenter des fonctions personnalisées dans la classe Extension et les utiliser dans le workflow.