Criando um frasco de gordura em Gradle
1. Visão geral
Neste artigo rápido, abordaremos a criação de um "jarro de gordura" no Gradle.
Basicamente,a fat jar (also known as uber-jar) is a self-sufficient archive which contains both classes and dependencies needed to run an application.
2. Configuração inicial
Vamos começar com um arquivobuild.gradle simples para um projeto Java com duas dependências:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
}
3. Usando a Tarefa Jar do Plug-in Java
Vamos começar modificando a tarefajar do plug-in Java Gradle. Por padrão, esta tarefa produz jars sem nenhuma dependência.
Podemos sobrescrever esse comportamento adicionando algumas linhas de código. Precisamos de duas coisas para fazê-lo funcionar:
-
um atributoMain-Class no arquivo de manifesto
-
Incluir jarros de dependências
Vamos adicionar algumas modificações à tarefa do Gradle:
jar {
manifest {
attributes "Main-Class": "com.example.fatjar.Application"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
4. Criação de uma tarefa separada
Se quisermos deixar a tarefa jar original como está, podemos criar uma tarefa separada que fará o mesmo trabalho.
O código a seguir adicionará uma nova tarefa chamadacustomFatJar:
task customFatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'com.example.fatjar.Application'
}
baseName = 'all-in-one-jar'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
5. Usando Plugins Dedicados
Também podemos usar os plugins Gradle existentes para criar um frasco de gordura.
Neste exemplo, usaremos o plug-inShadow:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
}
}
apply plugin: 'java'
apply plugin: 'com.github.johnrengelman.shadow'
Assim que aplicarmos o plugin Shadow, a tarefashadowJar estará pronta para uso.
6. Conclusão
Neste tutorial, apresentamos algumas maneiras diferentes de criar frascos de gordura no Gradle. Substituímos a tarefa jar padrão, criamos uma tarefa separada e usamos o plugin shadow.
Qual abordagem é recomendada? A resposta é - depende.
Em projetos simples, é suficiente substituir a tarefa jar padrão ou criar uma nova. Mas, à medida que o projeto cresce, é altamente recomendável o uso de plug-ins, porque eles já solucionaram problemas mais difíceis, como conflitos com arquivos META-INF externos.
Como sempre, a implementação completa deste tutorial pode ser encontradaover on GitHub.