En Sonatype Nexus Repository, cuando trabajas con artefactos de Apache Maven, existen tres tipos principales de repositorios: Hosted, Proxy y Group. Cada uno cumple un rol específico dentro de la arquitectura de gestión de dependencias.
Tipos de repositorios
Existen 3 tipos de repositorios
- Repositorio Hosted (para publicar tus propios paquetes)
- Repositorio Proxy (para cachear desde el gestor de paquetes Central)
- Repositorio Group (para usar uno solo desde donde se necesite)
Maven Hosted Repository
Es un repositorio remoto gestionado internamente por Nexus, donde una organización almacena sus propios artefactos binarios (JARs, WARs) y dependencias privadas.
¿Qué hace?
- Almacena artefactos que tú publicas.
- Puede ser para:
- Releases (
1.0.0) - Snapshots (
1.0.0-SNAPSHOT) - Librerías internas
- Artefactos construidos por tu pipeline CI/CD
- Releases (
Tu proyecto → mvn deploy → Nexus (Hosted)
Caso práctico
Si creas una librería interna:
mvn deploy
El .jar se sube a tu repositorio maven-releases o maven-snapshots.
Maven Proxy Repository
Es un tipo de repositorio gestionado con Nexus que actúa como un intermediario entre una red local y repositorios remotos públicos (ej. Maven Central).
¿Qué hace?
- Descarga dependencias desde repositorios públicos.
- Las guarda en caché.
- Las sirve desde tu Nexus en futuras solicitudes.
Ejemplo clásico
Proxy hacia:
-
Maven Central
Flujo
Proyecto → Nexus Proxy → Maven Central
(la primera vez descarga, luego sirve desde caché)
Beneficios
- Mejor rendimiento.
- Menos dependencia de internet.
- Control de qué dependencias entran a tu organización.
- Mayor seguridad.
Maven Group Repository
Almacenamiento estructurado (local o remoto) utilizado para gestionar, organizar y descargar dependencias, plugins y artefactos de proyectos Java, basado en coordenadas únicas
- Local: Es una carpeta en la máquina del desarrollador (
~/.m2/repository) que almacena en caché los artefactos descargados y los proyectos compilados localmente. - Remoto: Servidores públicos (como Maven Central) o privados (como Artifactory o Nexus) que albergan bibliotecas y plugins.
¿Qué hace?
- Presenta una única URL.
- Internamente consulta múltiples repositorios en orden.
Ejemplo típico de grupo
maven-public
├── maven-releases (hosted)
├── maven-snapshots (hosted)
└── maven-central (proxy)
Flujo
Proyecto → maven-public (Group) → Nexus decide dónde buscar
El desarrollador solo configura:
<repository>
<url>http://nexus:8081/repository/maven-public/</url>
</repository>
Y Nexus decide si:
- Está en Hosted
- Está en Proxy
- Debe buscar en remoto
Ventaja clave
👉 Simplifica configuración. El desarrollador no necesita conocer todos los repositorios internos.
Comparación Técnica
| Tipo | Almacena artefactos propios | Descarga de internet | Es virtual |
|---|---|---|---|
| Hosted | ✅ Sí | ❌ No | ❌ No |
| Proxy | ❌ No | ✅ Sí | ❌ No |
| Group | ❌ No (agrega otros) | Indirectamente | ✅ Sí |
Arquitectura típica empresarial
En producción normalmente se tiene:
maven-releases→ Hostedmaven-snapshots→ Hostedmaven-central→ Proxymaven-public→ Group (incluye todos)
Y los desarrolladores SOLO usan el Group.
Crear primer repositorio Maven en Nexus
El objetivo es crear lo siguiente:
- Un repositorio Maven Hosted (para publicar tus propios JARs)
- Un repositorio Maven Proxy (para cachear Maven Central)
- Un repositorio Maven Group (para usar uno solo desde Maven)
En nexus por defecto ya crea un repositorio maven-releases, así que vamos a crear un maven-releases-local
Crear un Maven Hosted (artefactos internos)
Ingresamos a los repositorios con la ruta Settings → Repositories → Create repository
Mostrara la siguiente pantalla seleccionaremos el recipiente a usar, en este caso:
maven2 (hosted)
En el formulario de crear el repositorio vamos a colocar los siguientes datos
Completa así:
- Name: maven-releases
- Version policy: Release
- Deployment policy: Allow redeploy (para pruebas)
Click en Create repository
✔ Ya tienes tu repositorio para versiones finales.
Crear un Maven Proxy (para Maven Central)
Este es el que realmente usarás desde Maven.
Ingresamos a los repositorios con la ruta Settings → Repositories → Create repository
Seleccionamos maven2 (proxy)
En el formulario colocamos
- Name maven-central
- Remote storage https://repo1.maven.org/maven2/
- Version policy Release
Click en Create repository
✔ Ahora Nexus puede descargar dependencias externas y guardarlas.
Crear un Maven Group (el más importante)
Este es el que realmente usarás desde Maven.
Ingresamos a los repositorios con la ruta Settings → Repositories → Create repository
Seleccionamos maven2 (group)
En la sección Group members, agrega:
maven-releasesmaven-central
Moverlos al lado derecho (Selected).
Click en Create repository
¿Qué acabas de construir?
Maven (tu proyecto)
↓
maven-public (group)
↓
├── maven-releases (interno)
└── maven-central (proxy)
Ahora tu proyecto solo apunta a:
http://localhost:8081/repository/maven-public/
Crear un proyecto Maven
Para mas detalle de cómo crear un repositorio revisa la el post Crear un archetype web con maven y java, a continuación, realizamos un ejemplo, se asume que ya tiene conocimiento de Java y maven ademas de tener estos instalados en su maquina local.
Crear el arquetipo
En tu máquina ejecutamos:
mvn archetype:generate -DgroupId=com.oscar.demo -DartifactId=mi-libreria -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Entrar al proyecto:
cd mi-libreria
Estructura generada:
mi-libreria/
├── pom.xml
└── src/
Ajustar versión (Release)
Edita el pom.xml y asegúrate:
<groupId>com.oscar.demo</groupId>
<artifactId>mi-libreria</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
⚠ No debe terminar en -SNAPSHOT si vas a usar maven-releases.
Configurar credenciales en Maven
~/.m2/settings.xml
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>TU_PASSWORD</password>
</server>
</servers>
(Usa el usuario que creaste en Nexus, idealmente no admin en producción)
Generar el JAR
mvn clean package
Se crea: target/mi-libreria-1.0.0.jar
Publicar en Nexus
mvn clean deploy
Si todo está correcto verás:
BUILD SUCCESS
Verificar en Nexus
Ingresamos de nuevo a Maven, y en la sección de browse, buscamos el repositorio maven-releases-local, en donde veremos el componente creado y subido.
Con esto ya podemos cargar nuestros propios artefactos en Java a un repositorio privado que podemos controlar.