Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.

Quando trabalhamos com dependências externas no Gradle, normalmente adicionamos a biblioteca toda, o que às vezes pode trazer mais código do que realmente precisamos. Essa prática pode impactar na performance, no tamanho do pacote final e na segurança, ao incluir classes que não são necessárias.
Para evitar esse problema, uma estratégia comum é usar configurações de dependência específicas ou modularizar sua própria implementação. No entanto, o Gradle não oferece uma opção nativa para importar apenas partes de uma biblioteca — geralmente, é necessário criar um arquivo JAR customizado ou usar técnicas de shading. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Uma alternativa prática é usar o plugin Shadow, que permite criar fat JARs com apenas as classes que você deseja, ou então, seguir o caminho de modularizar a dependência na origem, se ela for de sua autoria ou puder ser ajustada.
No seu caso, analisar se a biblioteca fornece módulos ou artefatos menores pode ajudar. Além disso, verificar se há opções de 'shading' ou 'relocation' que possibilitem incluir somente o necessário. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
No geral, essa abordagem melhora o controle sobre o que entra na sua build e reduz o risco de conflitos ou problemas de segurança.
Quem já passou por isso, tem alguma dica de como facilitar essa seleção de classes na prática?
Concordo, Daniel. Aqui também tentamos modularizar o máximo possível na fonte, mas às vezes dependência de terceiros complicam. No final, usar um shade customizado é melhor que trazer tudo.
No meu time, a gente faz um build manual com o shade e remove o que não precisa, fnuciona bem pra controle. Mas dá trabalho na configuração inicial.
Já tentei usar o shadow pra criar fat jars só com partes específicas, ajuda bastante, mas precisa ficar de olho nas classes transitórias que podem acabar sendo necessárias indiretamente.
A minha dúvida é: vale a pena o esforço pra uma lib que muda bastante ou é melhor buscar alternativas menores?