Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao trabalhar com aplicações Java, uma dúvida recorrente é como manipu lar dependências com escopo "provided" na hora de criar pacotes finais, especialmente usando plugins como o Maven Shade. Essas dependências são previstas para serem fornecidas pelo ambiente de execução, mas há cenários onde precisamos incluir algumas classes específicas dessas dependências no pacote final, sem alterar o escopo original. Este guia aborda uma abordagem prática para esse problema, destacando os passos, limitações e boas práticas.
Dependências marcadas como "provided" indicam que o container ou ambiente de execução vai fornecer esses JARs, portanto, elas não devem ser empacotadas no artefato final automaticamente. Isso é útil para evitar redundância e problemas de compatibilidade. No entanto, há casos em que é necessário incluir algumas classes específicas dessas dependências, por motivos de compatibilidade, customizações ou requisitos específicos do projeto.
O desafio é que o plugin Maven Shade, por padrão, ignora dependências com escopo "provided" durante o processo de shading. Isso acontece porque o próprio Maven, ao montar o classpath do projeto, exclui essas dependências na fase de empacotamento, considerando-as intencionalmente ausentes do pacote final.
Para verificar se uma dependência "provided" está sendo ignorada, é possível observar o conteúdo do JAR gerado e conferir se as classes desejadas estão presentes. Além disso, é importante entender que o plugin Shade usa o classpath do Maven para determinar o que incluir, e dependencies com escopo "provided" não fazem parte desse classpath padrão. 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.
Outro ponto é que, ao tentar filtrar classes específicas usando configurações de filtro no Shade, elas podem não ser consideradas se a dependência foi excluída do classpath por causa de seu escopo.
A solução envolve duas etapas principais:
1. Forçar a inclusão da dependência "provided" no shading: isso pode ser feito ajustando o escopo de dependências no Maven ou, preferencialmente, configurando o Shade para incluir explicitamente a dependência, independentemente do escopo.
2. Filtrar e incluir apenas as classes necessárias: usando os filtros do Shade, especificando as classes exatas que devem ser incluídas.
No seu pom.xml, adicione uma configuração que força a inclusão da dependência mesmo com escopo "provided". Uma estratégia é usar o elemento <artifactSet> com <includes> para garantir que a dependência seja considerada: 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. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. 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.
<configuration>
<artifactSet>
<includes>
<include>org.apache.tomcat:tomcat-catalina</include>
</includes>
</artifactSet>
<filters>
<filter>
<artifact>org.apache.tomcat:tomcat-catalina</artifact>
<includes>
<include>org/apache/catalina/deploy/LoginConfig.class</include>
</includes>
</filter>
</filters>
</configuration>
Se o Maven não estiver incluindo a dependência, uma alternativa é alterar temporariamente o escopo para compile apenas na hora do build, ou usar uma configuração de perfil para isso, e depois restaurar o escopo padrão. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. 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. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Após o build, confira se as classes específicas estão presentes no JAR. Caso necessário, ajuste os filtros para incluir o máximo de classes possível de forma seletiva.
Manipular dependências com escopo "provided" no processo de shading exige ajustes específicos na configuração do plugin. A estratégia de incluir explicitamente as dependências desejadas e filtrar as classes específicas garante maior controle sobre o conteúdo final do pacote, evitando surpresas na hora do deploy. Essa abordagem ajuda a manter a flexibilidade sem comprometer a integridade do ambiente de execução. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Se precisar de uma solução mais automatizada ou de um exemplo de configuração completa, posso ajudar a montar um exemplo prático de pom.xml ajustado para esse cenário. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Carregando comentários...