8 - Gestión de proyectos Java con Gradle

Objetivo del tema

Descubrirás cómo Gradle estructura un proyecto en Java, desde la compilación inicial hasta la ejecución y el empaquetado final.

Al completar este tema podrás preparar builds reproducibles, definir la clase principal de tu aplicación y generar artefactos listos para distribución.

8.1 Compilación de proyectos Java

El plugin java aporta la estructura convencional src/main/java y tareas como compileJava y test. El comando gradle build ejecuta el ciclo completo (compilar, procesar recursos, pruebas y ensamblado).

  • Asegura que el JDK configurado coincide con el nivel de lenguaje requerido por tu proyecto.
  • La tarea compileJava respeta el directorio fuente estándar; puedes agregar directorios adicionales mediante sourceSets.
  • El build falla rápidamente si hay errores de compilación, lo que evita generar binarios inconsistentes.
plugins {
  id 'java'
}

java {
  toolchain {
    languageVersion = JavaLanguageVersion.of(25)
  }
}

sourceSets {
  main {
    java.srcDirs('src/main/java', 'src/main/generated')
  }
}

Ejecuta gradle build para validar que el código compile y que las pruebas automáticas se ejecuten de forma satisfactoria.

8.2 Configuración de mainClassName

El plugin application agrega la extensión application, donde defines la clase con el método main que se usará al ejecutar la aplicación.

plugins {
  id 'java'
  id 'application'
}

application {
  mainClass = 'com.ejemplo.App'
  applicationDefaultJvmArgs = ['-Denv=dev']
}

Añadir argumentos por defecto facilita ajustar la configuración de la JVM sin modificar scripts externos.

Configuración de la aplicación en Gradle con argumentos predeterminados

8.3 Ejecución de aplicaciones (gradle run)

Con la clase principal definida, puedes iniciar la aplicación con la tarea run. Esta tarea compila el proyecto si hay cambios pendientes y luego invoca el main.

  • Utiliza gradle run durante el desarrollo para validar cambios rápidamente.
  • Pasa argumentos con --args="--modo batch" para adaptar el comportamiento del programa.
  • En entornos CI es recomendable usar el Gradle Wrapper (./gradlew run) para asegurar la versión correcta.
# Ejecutar la aplicación
./gradlew run

# Ejecutar con argumentos
./gradlew run --args="--modo batch --nivel INFO"

La salida de la tarea se muestra en la consola de Gradle, lo que facilita depurar e integrar el comando en scripts automatizados.

8.4 Empaquetado con gradle jar

La tarea jar genera el archivo JAR con las clases compiladas y los recursos. Puedes personalizar el manifiesto para incluir metadatos como la clase de entrada, la versión y la autoría.

tasks.named('jar') {
  archiveBaseName.set('demo-app')
  archiveVersion.set(project.version)
  manifest {
    attributes(
      'Main-Class': 'com.ejemplo.App',
      'Implementation-Version': project.version
    )
  }
}

// Generar el paquete
// gradle jar

El artefacto resultante se ubica en build/libs; puedes distribuirlo o usarlo como insumo para empaquetados más avanzados como Shadow.

Resumen didáctico

Gestionar un proyecto Java con Gradle implica dominar las tareas de compilación, definir la clase principal para la ejecución directa y configurar el empaquetado final. Con estas prácticas obtienes builds reproducibles y listos para integrarse en pipelines de despliegue continuo.