Frasco de sombra de graduação com dependências conflitantes
-
21-12-2019 - |
Pergunta
Eu estou brincando com a ideia de criar frascos Uber por meus serviços, mas estou preocupado em incluir frascos que têm dependências conflitantes.O que acontece quando Jar A depende do SLF4J-1.0 e JAR B depende do SLF4J-2.0 e houve grandes mudanças entre 1,0 e 2.0?Quando esses frascos são incluídos no Uber Jar, eu tenho que escrever filtros específicos por namespace ou algo acontecer durante o processo de sombra que namespaces os frascos?
Obrigado pela ajuda
Solução
Você está correto para se preocupar.Você acaba com colisões (um colega chamou de 'DLL Inferno de novo') e às vezes você pode ter aulas de V1 e V2 no mesmo diretório no jarfile.
Você pode excluir uma ou a outra versão facilmente, mas se suas dependências precisarem de ambos, você enfrenta as seguintes opções:
- Encontre uma nova dependência que não tem o conflito
- upgrade ou downgrade de uma dependência atual para trazer versões na linha
- navio como um arquivo de guerra ou algum outro tipo de arquivo que lida com isso melhor, incluindo um jarfile normal com um manifesto que inclui um classpath
- Considere a bota de primavera, que usa uma estratégia diferente do sombreamento: http://docs.spring.io/spring-boot/docs/current-snapshot/reference/#lsingle/#executable-Jar
Tudo o que você faz, Gradle Dependências é útil.