Objetivo del tema
Aprenderas a empaquetar artefactos con Gradle y publicarlos en repositorios corporativos o publicos como Maven Central.
Al finalizar, podras generar JAR/WAR, configurar publicacion, manejar versionado/snapshots y proteger credenciales de despliegue.
Gradle incluye tareas jar
y war
para empaquetar bibliotecas y aplicaciones web. Puedes personalizar metadatos y contenidos.
plugins {
id 'java-library'
id 'war'
}
tasks.named('jar') {
archiveBaseName.set('demo-lib')
manifest {
attributes 'Implementation-Version': project.version,
'Implementation-Vendor': 'Ejemplo S.A.'
}
}
tasks.named('war') {
archiveBaseName.set('demo-web')
}
El artefacto JAR se genera en build/libs
y el WAR en build/libs
con extension .war
. Usa classes
o processResources
como dependencias si necesitas preparar archivos antes del empaquetado.
El plugin maven-publish
permite publicar en repositorios Maven. Para Maven Central se requiere crear staging repositories via Sonatype y firmar artefactos.
plugins {
id 'java'
id 'maven-publish'
id 'signing'
}
publishing {
publications {
create('mavenJava', MavenPublication) {
from components.java
pom {
name.set('Demo Library')
description.set('Biblioteca de ejemplo publicada con Gradle')
url.set('https://github.com/ejemplo/demo-lib')
licenses {
license {
name.set('Apache License 2.0')
url.set('https://www.apache.org/licenses/LICENSE-2.0')
}
}
scm {
url.set('https://github.com/ejemplo/demo-lib')
}
}
}
}
repositories {
maven {
name = 'sonatype'
url = uri('https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/')
credentials {
username = findProperty('sonatypeUser')
password = findProperty('sonatypePassword')
}
}
}
}
signing {
sign publishing.publications['mavenJava']
}
Define las credenciales en gradle.properties
(no las subas al repositorio). Para repositorios privados internos, reemplaza la URL y omite la firma si no es requerida.
Gradle toma la version del proyecto desde version
en build.gradle
o gradle.properties
. Utiliza sufijos -SNAPSHOT
para builds de desarrollo y reglas automaticas en pipelines.
def esSnapshot = project.version.toString().endsWith('-SNAPSHOT')
tasks.register('imprimirVersion') {
doLast {
println "Version actual: ${project.version} (snapshot: ${esSnapshot})"
}
}
tasks.named('publish') {
onlyIf {
!esSnapshot || System.getenv('ALLOW_SNAPSHOT') == 'true'
}
}
En Maven Central, los snapshots se suben a repositorios dedicados (https://s01.oss.sonatype.org/content/repositories/snapshots/
) y no requieren cerrar staging repositories.
Maneja secretos con seguridad. Usa gradle.properties
local, variables de entorno o sistemas de secret management en el CI/CD. Nunca hardcodees contraseñas en el repositorio.
# ~/.gradle/gradle.properties
sonatypeUser=usuarioExample
sonatypePassword=claveSegura
signing.keyId=ABCD1234
signing.password=claveFirma
signing.secretKeyRingFile=/Users/ejemplo/secring.gpg
El directorio ~/.gradle
no se versiona, lo que protege credenciales. En pipelines, inyecta variables de entorno y mapealas a propiedades con findProperty
.
Publicar artefactos con Gradle implica empaquetar JAR/WAR, configurar repositorios, firmar y versionar correctamente. Con el plugin maven-publish
, versionado disciplinado y manejo seguro de credenciales, puedes distribuir bibliotecas confiables tanto en Maven Central como en repositorios privados.