1. Prefácio
Em circunstâncias normais, o carregador de classe pode encontrar apenas o arquivo *.class no diretório atual ou na classe de arquivo no jar. Para carregar os recursos no frasco aninhado, o arquivo de classe no frasco aninhado e o arquivo de classe do aplicativo são embalados em um frasco, para que não haja jar aninhado. No entanto, ao fazer isso, você não pode saber claramente do que o aplicativo depende e de quais são o próprio aplicativo. Além disso, o conteúdo da classe em vários frascos pode ser diferente, mas os nomes dos arquivos são os mesmos. O Spring-Boot-Louper em Springboot nasceu para resolver esse problema graciosamente.
O módulo Spring-Boot-LOOTS permite usar o Java-Jar Archive.jar para executar arquivos de jar ou guerra contendo dependências aninhadas. Ele fornece três tipos de lançadores (Jarlancher, Warlauncher e Propertieslauncher). O objetivo desses lançadores de classe é poder carregar recursos aninhados no frasco (como arquivos de classe, arquivos de configuração etc.). [JAR | WAR] O lançador procura recursos fixamente os recursos em arquivos JAR aninhados no diretório Lib do JAR atual.
2. A estrutura do diretório JAR fornecida pelo módulo Spring-Boot-LOOT
O formato do arquivo JAR no Springboot é corrigido da seguinte forma:
archive.Jar | +-Meta-inf (1) | +-Manifest.mf +-org (2) | +-SpringFramework | +-boot | +-loader | +-<Classes de carregadores de inicialização da mola> +-com (3) | +-MyCompany | + projeto | +-Youclasses.class +-lib (4) +-dependency1.jar +-dependency2.jar
Então, como o Spring-Boot carrega os recursos de acordo com essa estrutura?
Classe principal: org.springframework.boot.loader.jarlauncher Start-Class: com.mycompany.project.myApplication
E copie o arquivo de classe no pacote de carregador de primavera para a estrutura (2), copie a dependência do aplicativo para (4) copiar a classe de aplicativo para (3)
3. Análise do processo de embalagem de plug-in de maça
NOTA: Aqui precisamos pensar sobre por que precisamos copiar a classe para estruturar (2) que deveriam ter sido colocados no Spring-boot-carregador.jar que deveríamos ter colocado na lib?
4. Análise do processo de execução de Jarlancher
Depois de ler esse processo, analisaremos os problemas deixados na terceira seção. Por exemplo, o FlowChart primeiro usa o AppClassLoader para carregar a classe Jarlauncher e criar a classe LaunchedUrlClassLoader. O lançamento do Pacote.Jar do pacote Spring-boot-boot-carregador, e o AppClassLoader é um carregador comum que não pode carregar os arquivos no frasco aninhado. Portanto, se o spring-boot-loader.jar for colocado no diretório Lib, o AppClassLoader não encontrará o Lançado com o LankLClassloader. Então, ao embalar
Copie a classe para estrutura (2) que deveria ter sido colocada no Spring-boot-carregador.jar na lib.
5. Resumo
O módulo Spring-Boot-LOOT implementa elegantemente o carregamento de recursos de jar aninhados através de uma estrutura de pacote de jar personalizada. Redefinindo a classe de inicialização e a estrutura da JAR da organização durante a embalagem e definir um carregador personalizado em tempo de execução para obter recursos de jar aninhados.