Parte 2: Crear un Proyecto de Plugin¶
Traducción asistida por IA - más información y sugerencias
Ya viste cómo los plugins extienden Nextflow con funcionalidades reutilizables. Ahora crearás el tuyo propio, comenzando con una plantilla de proyecto que maneja la configuración de compilación por ti.
¿Empezando desde aquí?
Si te unes en esta parte, copia la solución de la Parte 1 para usarla como punto de partida:
Documentación oficial
Esta sección y las que siguen cubren los aspectos esenciales del desarrollo de plugins. Para más detalles, consulte la documentación oficial de desarrollo de plugins de Nextflow.
1. Crear el proyecto del plugin¶
El comando integrado nextflow plugin create genera un proyecto de plugin completo:
Plugin created successfully at path: /workspaces/training/side-quests/plugin_development/nf-greeting
El primer argumento es el nombre del plugin y el segundo es el nombre de su organización (usado para organizar el código generado en carpetas).
Creación manual
También puede crear proyectos de plugins manualmente o usar la plantilla nf-hello en GitHub como punto de partida.
2. Examinar la estructura del proyecto¶
Un plugin de Nextflow es un componente de software Groovy que se ejecuta dentro de Nextflow. Extiende las capacidades de Nextflow usando puntos de integración bien definidos, lo que significa que puede trabajar con características de Nextflow como canales, procesos y configuración.
Antes de escribir cualquier código, observe lo que generó la plantilla para saber dónde va cada cosa.
Cambie al directorio del plugin:
Liste el contenido:
Debería ver:
.
├── 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. Explorar la configuración de compilación¶
Un plugin de Nextflow es software basado en Java que debe compilarse y empaquetarse antes de que Nextflow pueda usarlo. Esto requiere una herramienta de compilación.
Gradle es una herramienta de compilación que compila código, ejecuta pruebas y empaqueta software.
La plantilla del plugin incluye un wrapper de Gradle (./gradlew) para que no necesite tener Gradle instalado por separado.
La configuración de compilación le indica a Gradle cómo compilar su plugin y le indica a Nextflow cómo cargarlo. Dos archivos son los más importantes.
3.1. settings.gradle¶
Este archivo identifica el proyecto:
El nombre aquí debe coincidir con lo que pondrá en nextflow.config al usar el plugin.
3.2. build.gradle¶
El archivo de compilación es donde ocurre la mayor parte de la configuración:
El archivo contiene varias secciones.
La más importante es el bloque 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: Versión mínima de Nextflow requeridaprovider: Su nombre u organizaciónclassName: La clase principal del plugin, el punto de entrada que Nextflow carga primeroextensionPoints: Clases que agregan funcionalidades a Nextflow (sus funciones, monitoreo, etc.)
El bloque nextflowPlugin configura:
nextflowVersion: Versión mínima de Nextflow requeridaprovider: Su nombre u organizaciónclassName: La clase principal del plugin (el punto de entrada que Nextflow carga primero, especificado enbuild.gradle)extensionPoints: Clases que agregan funcionalidades a Nextflow (sus funciones, monitoreo, etc.)
3.3. Actualizar nextflowVersion¶
La plantilla genera un valor de nextflowVersion que puede estar desactualizado.
Actualícelo para que coincida con su versión instalada de Nextflow y garantizar compatibilidad total:
4. Conocer los archivos fuente¶
El código fuente del plugin se encuentra en src/main/groovy/training/plugin/.
Hay cuatro archivos fuente, cada uno con un rol específico:
| Archivo | Rol | Modificado en |
|---|---|---|
GreetingPlugin.groovy |
Punto de entrada que Nextflow carga primero | Nunca (generado) |
GreetingExtension.groovy |
Define funciones invocables desde los workflows | Parte 3 |
GreetingFactory.groovy |
Crea instancias del observer cuando inicia un workflow | Parte 5 |
GreetingObserver.groovy |
Ejecuta código en respuesta a eventos del ciclo de vida del workflow | Parte 5 |
Cada archivo se presenta en detalle en la parte indicada, cuando lo modifique por primera vez. Los más importantes a tener en cuenta:
GreetingPlugines el punto de entrada que carga NextflowGreetingExtensionprovee las funciones que este plugin pone a disposición de los workflowsGreetingObserverse ejecuta junto al pipeline y responde a eventos sin requerir cambios en el código del 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. Compilar, instalar y ejecutar¶
La plantilla incluye código funcional desde el principio, por lo que puede compilarlo y ejecutarlo de inmediato para verificar que el proyecto esté configurado correctamente.
Compile el plugin e instálelo localmente:
make install compila el código del plugin y lo copia a su directorio local de plugins de Nextflow ($NXF_HOME/plugins/), dejándolo disponible para usar.
Salida de la compilación
La primera vez que ejecute esto, Gradle se descargará a sí mismo (esto puede tardar un minuto):
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
Las advertencias son esperadas.
- "Downloading gradle...": Esto solo ocurre la primera vez. Las compilaciones posteriores son mucho más rápidas.
- "Deprecated Gradle features...": Esta advertencia proviene de la plantilla del plugin, no de su código. Puede ignorarla sin problema.
- "BUILD SUCCESSFUL": Esto es lo que importa. Su plugin se compiló sin errores.
Regrese al directorio del pipeline:
Agregue el plugin nf-greeting a nextflow.config:
Versión requerida para plugins locales
Al usar plugins instalados localmente, debe especificar la versión (por ejemplo, nf-greeting@0.1.0).
Los plugins publicados en el registro pueden usar solo el nombre.
Ejecute el pipeline:
El indicador -ansi-log false deshabilita la visualización animada del progreso para que toda la salida, incluidos los mensajes del observer, se imprima en orden.
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! 👋
(El orden de su salida y los hashes del directorio de trabajo serán diferentes.)
Los mensajes "Pipeline is starting!" y "Pipeline complete!" se parecen a los del plugin nf-hello de la Parte 1, pero esta vez provienen del GreetingObserver en su propio plugin.
El pipeline en sí no ha cambiado; el observer se ejecuta automáticamente porque está registrado en la factory.
Conclusión¶
Aprendió que:
- El comando
nextflow plugin creategenera un proyecto inicial completo build.gradleconfigura los metadatos del plugin, las dependencias y qué clases proveen funcionalidades- El plugin tiene cuatro componentes principales: Plugin (punto de entrada), Extension (funciones), Factory (crea monitores) y Observer (responde a eventos del workflow)
- El ciclo de desarrollo es: editar el código, ejecutar
make install, ejecutar el pipeline
¿Qué sigue?¶
Ahora implementará funciones personalizadas en la clase Extension y las usará en el workflow.