Maven y Gradle: gestión de dependencias y construcción

Las dos herramientas de build más usadas en el ecosistema Java

Por qué se necesita una herramienta de build

Java no tiene gestión de dependencias incorporada en el lenguaje. Sin una herramienta de build hay que descargar JARs manualmente, añadirlos al classpath y recordar versiones. Las herramientas de build automatizan:

  • Descarga de dependencias desde repositorios (Maven Central, JCenter...).
  • Resolución de dependencias transitivas (las dependencias de tus dependencias).
  • Compilación, ejecución de tests y empaquetado en un orden reproducible.
  • Configuración del classpath para compilación y ejecución.

Maven y Gradle son las dos opciones dominantes. Maven es más antiguo y prescriptivo (convención sobre configuración). Gradle es más flexible y usa un DSL para describir el build.

# Estructura estándar de directorios (Maven y Gradle la comparten)
mi-proyecto/
├── src/
   ├── main/
   ├── java/ código fuente
   └── resources/ archivos de configuración, plantillas...
   └── test/
       ├── java/ tests
       └── resources/ recursos de tests
├── target/ Maven: directorio de salida (compilado, JAR)
├── build/ Gradle: directorio de salida
├── pom.xml Maven: descriptor del proyecto
└── build.gradle Gradle: script de construcción

Maven

Maven describe el proyecto en un fichero XML llamado pom.xml (Project Object Model). Las dependencias se declaran con coordenadas groupId:artifactId:version — Maven las descarga de Maven Central al directorio local ~/.m2/repository.

<!-- pom.xml mínimo -->
<project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.ejemplo</groupId>
  <artifactId>mi-proyecto</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>32.1.3-jre</version>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.10.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
# Compilar el proyecto
mvn compile

# Ejecutar tests
mvn test

# Empaquetar en JAR
mvn package

# Limpiar directorio target/
mvn clean

# Secuencia más habitual:
mvn clean package

# Omitir tests (para acelerar el build)
mvn clean package -DskipTests

# Instalar en repositorio local (~/.m2)
mvn install

Gradle

Gradle describe el build con un script en Groovy DSL (build.gradle) o Kotlin DSL (build.gradle.kts). Es más rápido que Maven en builds incrementales gracias a su caché de tareas. Android Studio usa Gradle como sistema de build oficial.

El gradlew (Gradle Wrapper) es un script que descarga automáticamente la versión correcta de Gradle — no hace falta instalarlo de forma global.

// build.gradle (Groovy DSL)
plugins {
    id 'java'
}

group = 'com.ejemplo'
version = '1.0-SNAPSHOT'

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'com.google.guava:guava:32.1.3-jre'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
}

test {
    useJUnitPlatform()
}
# Compilar
./gradlew compileJava

# Ejecutar tests
./gradlew test

# Construir el JAR
./gradlew build

# Limpiar
./gradlew clean

# Limpiar y construir
./gradlew clean build

# Ver tareas disponibles
./gradlew tasks
¿Cuál elegir? En proyectos legacy y Spring Boot empresarial, Maven es más habitual. En proyectos Android y proyectos modernos con builds complejos, Gradle. Para este curso es indiferente — los ejemplos de código son independientes de la herramienta de build.

Siguiente apartado → IDEs disponibles: IntelliJ IDEA, Eclipse, VS Code y NetBeans

Índice de la sección

Índice del curso