Ejecutar cualquier clase Main con Gradle y Quarkus en Windows
Objetivo
Cuando trabajas en un laboratorio de Java con muchas clases, muchas veces quieres probar rápidamente cualquier clase con un main
sin depender del IDE ni marcar una clase por defecto.
En este flujo:
- Usamos Gradle para manejar compilación, classpath y dependencias.
- Creamos tareas personalizadas (
runMain
yrunTest
) para ejecutar cualquier clasemain
. - Evitar definir
mainClass
por defecto enbuild.gradle
. - Todo funciona desde la consola en Windows, sin depender del IDE.
1️⃣ Configurar build.gradle
plugins {
id 'java'
id 'io.quarkus'
id 'application' // permite usar gradlew run si quieres
}
repositories {
mavenCentral()
}
dependencies {
implementation 'io.quarkus:quarkus-rest'
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'org.json:json:20230227'
testImplementation 'io.quarkus:quarkus-junit5'
}
2️⃣ Crear tareas para ejecutar cualquier clase main
// Ejecutar clases main del código principal
tasks.register('runMain', JavaExec) {
description = 'Ejecuta cualquier clase main pasando el nombre como parámetro.'
classpath = sourceSets.main.runtimeClasspath
if (project.hasProperty('mainClassName')) {
mainClass = project.property('mainClassName')
}
}
// Ejecutar clases main del código de prueba
tasks.register('runTest', JavaExec) {
description = 'Ejecuta una clase con un método main desde el classpath de prueba.'
classpath = sourceSets.test.runtimeClasspath
if (project.hasProperty('mainClassName')) {
mainClass = project.property('mainClassName')
}
}
3️⃣ Cómo ejecutar tus clases en Windows
Código principal (src/main/java/...
):
.\gradlew runMain "-PmainClassName=py.com.lab.MainLab"
Código de prueba (src/test/java/...
):
.\gradlew runTest "-PmainClassName=py.com.lab.MainTestLab"
🔹 Observación: En Windows conviene usar comillas" "
alrededor de-PmainClassName=…
.
4️⃣ Beneficios de este enfoque
- Flexibilidad total: puedes ejecutar cualquier clase
main
sin cambiarbuild.gradle
. - Independencia del IDE: todo se hace desde la consola, ideal para laboratorio.
- Gestión automática del classpath: Gradle carga automáticamente todas las librerías y clases del proyecto.
- Separación de entornos: puedes ejecutar clases de prueba y código principal de forma independiente.
- Escalable: incluso si tu laboratorio crece a muchas clases, sigue siendo fácil de manejar.
Consejos
- Mantén tus clases organizadas en paquetes como
py.com.lab
opy.com.lab.tests
para evitar conflictos. - Para agregar nuevas librerías, solo añádelas en
dependencies {}
. - Puedes combinar este flujo con pruebas unitarias, Quarkus Dev Mode y tareas personalizadas para laboratorio.
Comentarios
Publicar un comentario