1. Antecedentes do projeto
A Spring Cloud cria projetos de inicialização da primavera, refina os níveis de cada projeto e alcança o objetivo de reduzir o acoplamento. Os projetos são baseados em comunicação RESTful.
Durante o processo de embalagem do projeto, use o plug-in Spring-Boot-Maven-Plugin para empacotá-lo e o frasco de gordura é gerado. Se o pacote JAR estiver descompactado, você descobrirá que o pacote JAR de que o projeto depende é armazenado na pasta Lib em Boot-Inf. Depois de analisar vários subprojetos, você descobrirá que o mesmo pacote JAR é responsável pela grande maioria. Então, cada vez que é implantado em um ambiente on -line, os frascos comuns de cada sistema são realmente arquivados repetidamente no servidor. Portanto, você pensará naturalmente se existe uma maneira de extrair o pacote JAR comum ou o pacote JAR que não é modificado com frequência, classificar uma cópia separada e, em seguida, usar o carregamento externo para alcançar o objetivo de perder peso por potes de gordura.
2. Slimming de jarra de gordura
Após a análise acima e revisando as informações relevantes, resolvemos as seguintes etapas para fazer o Slimming do Jar-Package:
1. Cada projeto configura o plugin Spring-Boot-Maven-Plugin (documento oficial) para gerar o pacote JAR retido no frasco de gordura
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layout>ZIP</layout> <!-- <excludeGroupIds> org.springframework.boot, org.springframework.cloud, org.mybatis.spring.boot, tk.mybatis, mysql, com.alibaba, javax.persistence, io.springfox, org.springframework.session </cligirGroupIds> -> </incluem> incluem> <rugnid> xx </groupid> <stifactid> xx </sthactid> <TarfactId> xx </artifactId> </bticcs> </inclui> </frifiguration> </flugin>
Como no código acima, você pode usar excluiGroupIds ou incluir ou outras tags, dependendo da situação.
2. Extraia os pacotes JAR que você não deseja armazenar no frasco de gordura a partir do frasco de dependência do projeto.
Método 1 (recomendado): Adicione plug-in de dependência do Maven ao arquivo POM do projeto (documento oficial)
<Plugin> <UrprouDID> org.apache.maven.plugins </groupiD> <TarifactId> MAVEN-PLUGIN </ArtifactId> <Version> 3.1.1 </version> </tecaions> <secution> <secution> <iD> copy-dependedents </id> <fase> </fase> <- <putputDirectory> e:/lib </itputDirectory>-> <clududeGroupids> <!-permanece no valor do atributo de grupo de gordura (múltiplo, separado) do pacote JAR em jar-> </cludeGroupids> </execution>
Verifique o documento oficial para obter o significado específico da tag.
Ao usar o Maven para empacotar um projeto, use o comando Maven:
mvn limpo install -dmaven.test.skip = true -doutputDirectory = e:/lib (-doutputDirectory = e:/lib é o caminho exportado pelo pacote jar que o projeto depende dinamicamente.
Após o plug-in de configuração executar este comando, exceto o pacote JAR configurado na tag excluiGroupIDS, o restante do projeto será importado para o diretório especificado, e os pacotes de excesso de jar no frasco de gordura serão extraídos.
Método 2: Não adicione o plug-in de dependência do Maven ao projeto e use diretamente o MVN para copiar os comandos que dependem do pacote JAR para o projeto. Este método requer a cópia de dependência de cada subprojeto um por um, e poucos subprojetos podem ser usados.
Dependência da MVN: dependências de cópia -DOUTputDirectory = e:/lib (se não houver diretório especificado dinamicamente, o diretório de dependência será gerado por padrão no caminho -alvo do projeto)
Coloque os pacotes JAR de dependência exportados por cada projeto em uma pasta, remova a duplicação e exclua os pacotes de jaro de dependência reservados no frasco de gordura e, em seguida, complete a remoção dos pacotes de jarro em excesso no frasco de gordura.
3. Coloque o pacote JAR extraído em um determinado caminho do servidor, configure o script de inicialização do projeto e carregue -o externamente.
nohup java -dloader.path = "xx/lib" -jar xx.jar
-Dloader.path é o endereço de carregamento externo.
Depois de se deparar, você pode ver no pacote JAR depois que o projeto estiver embalado. No LIB sob boot-inf, existem apenas os pacotes de jars necessários, o que reduz bastante o tamanho do frasco de gordura.
A configuração do POM pode ser usada no sistema de microsserviços para formar uma configuração unificada, e as dependências do pacote JAR em cada projeto são alteradas dependendo da situação específica.
3. Problemas encontrados e soluções
No processo de emagrecimento, não era uma navegação suave. Quando pensei que o trabalho foi feito e iniciei o projeto, descobri que a startup falhou e o frasco em conflito.
1. Resolva conflitos do pacote JAR, analise as dependências dos pacotes JAR através do comando MVN e encontre os pacotes JAR conflitantes e unifique a versão.
No Eclipse, criei uma nova construção do Maven. No começo, tentei dependência da MVN: árvore e analisei a dependência do pacote JAR como um todo, mas não encontrei a dependência do pacote de jar do problema. Então tentei dependência da MVN: árvore -dverbose e analisei toda a dependência implícita indireta como um todo e ainda não encontrei a dependência do pacote de jar do problema.
Neste ponto, suspeito que não haja pacote JAR no projeto. Após uma embalagem repetida, vejo que esse problema está realmente na dependência do projeto, mas está escondido muito profundamente. Portanto, apenas as análises podem ser realizadas para um único pacote JAR:
MVN Dependência: Árvore -dverbose -dincludes = xx: xx: xx (xx: xx: xx correspondente ao pacote JAR GroupID: ArtifactId: versão)
Depois de usar as dincludes, a relação dependência do pacote JAR correspondente é encontrada e o pacote JAR é excluído no projeto. Após a embalagem novamente, o projeto começa com sucesso e o problema é resolvido.
2. Durante o processo de embalagem, alguns subprojetos não usaram o plugin Spring-Boot-Maven-Plugin, mas usaram o maven-jar-plugin para empacotá-lo diretamente em um frasco de execução. Depois de combinar a configuração de emagrecimento de gordos, verificou -se que o frasco que poderia ter confiado em interoperáveis agora falhou. Como os frascos de gordura estão emagrecendo, apenas os frascos de projetos cujo código é frequentemente alterado são deixados e as dependências não são passadas em potes executáveis, portanto, você precisa depender explicitamente do pacote JAR do projeto necessário neste projeto para garantir a integridade do projeto.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.