1. Antecedentes del proyecto
Spring Cloud construye proyectos de arranque de primavera, refina los niveles de cada proyecto y logra el propósito de reducir el acoplamiento. Los proyectos se basan en una comunicación relajante.
Durante el proceso de embalaje del proyecto, use el complemento Spring-Boot-Maven-Plugin para empaquetarlo, y se genera el frasco de grasa. Si el paquete JAR está desabrochado, encontrará que el paquete JAR que depende del proyecto se almacena en la carpeta lib en Boot-Inf. Después de analizar múltiples subproyectos, encontrará que el mismo paquete JAR representa la gran mayoría. Luego, cada vez que se implementa en un entorno en línea, los frascos comunes de cada sistema se archivan repetidamente en el servidor. Por lo tanto, naturalmente pensará si hay una manera de extraer el paquete de jarro común o el paquete JAR que no se modifica a menudo, ordene una copia separada y luego use la carga externa para lograr el propósito de perder peso por frascos de grasa.
2. Jar de grasa adelgazante
Después del análisis anterior y la revisión de la información relevante, ordenamos los siguientes pasos para hacer que el tramo de jarra se adelgaze:
1. Cada proyecto configura el complemento Spring-Boot-Maven-Plugin (documento oficial) para generar el paquete JAR retenido en el frasco de grasa
<glugin> <uproupid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> <necuteation> <lElout> zip </lopout> <!-<CexudeGroupIds> org.springingwork.boot, org.spingFrameWork.cloud, org.mybatis tk.mybatis, mysql, com.alibaba, javax.persistence, io.springfox, org.springframework.session </excedeGroupIds> -> <incluye> <én> <MoupRoupId> xx </groupId> <artifactid> xx </artifactid> </include> </groupid> xx </groupId> <artifactid> xx </artifactid> </include> </groupid> xx </groupId> <artifactid> xx </artifactid> </include> </groupid> xx </groupid> <arifactid> xx </artifactid> </include> </groupid> <artifactid> xx </arfactid> </ incluido> </incluye> </figuration> </tugin>
Al igual que con el código anterior, puede usar ExcludeGroupIds, o incluir u otras etiquetas, dependiendo de la situación.
2. Extraiga los paquetes de jarra que no desea almacenar en el frasco de grasa del frasco de dependencia del proyecto.
Método 1 (recomendado): Agregue el complemento de dependencia de Maven al archivo POM del proyecto (documento oficial)
<glugin> <MoupRoD> org.apache.maven.plugins </groupid> <artifactID> maven-dependiente-plugin </artifactid> <versers> 3.1.1 </verversion> <secessions> <secution> <d <id> copy-dependents </id> <fase> paquete </fase> <estione> <put-gool> copy-dependents </meta> </metas de los males> <StoutDirectory> e:/lib </uteldirectory>-> <ScludeGroupIds> <!-permanece en el valor de atributo de grupo FAT (múltiple, separado) del paquete JAR en jar-> </scudeGroupIds> <verwriteSnapshots> verdadero </verwritesNapshots> </figuration> </secution> </ejecutions> </glugin>
Consulte el documento oficial para ver el significado específico de la etiqueta.
Cuando use Maven para empaquetar un proyecto, use el comando Maven:
MVN Clean Install -dmaven.test.skip = true -DoutputDirectory = e:/lib (-DoutputDirectory = e:/lib es la ruta exportada por el paquete JAR que el proyecto depende de dinámicamente.
Después de que el complemento de configuración ejecuta este comando, excepto el paquete JAR configurado en la etiqueta ExcludeGroupIds, el resto del proyecto se importará al directorio especificado, y los paquetes de exceso de JAR en el frasco de grasa se extraerán.
Método 2: no agregue el complemento de dependencia de Maven al proyecto y use directamente MVN para copiar los comandos que dependen del paquete JAR para el proyecto. Este método requiere la copia de dependencia de cada subproyecto uno por uno, y se pueden usar pocos subproyectos.
Dependencia de MVN: copia -dependencias -DoutputDirectory = e:/lib (si no hay un directorio especificado dinámicamente, el directorio de dependencia se generará de forma predeterminada en la ruta de destino del proyecto)
Coloque los paquetes de frasco de dependencia exportados por cada proyecto en una carpeta, elimine la duplicación y elimine los paquetes de frasco de dependencia reservados en el frasco de grasa, y luego complete la eliminación de los paquetes de exceso de frasco en el frasco de grasa.
3. Coloque el paquete JAR extraído en una determinada ruta del servidor, configure el script de inicio del proyecto y cargue externamente.
nohup java -dloader.path = "xx/lib" -jar xx.jar
-Dloader.path es la dirección de carga externa.
Después de adelgazar, puede ver en el paquete JAR después de empaquetar el proyecto. En el LIB bajo Boot-Inf, solo hay los paquetes de frasco requeridos, lo que reduce en gran medida el tamaño del frasco de grasa.
La configuración de POM se puede usar en el sistema de microservicio para formar una configuración unificada, y las dependencias del paquete JAR en cada proyecto se cambian según la situación específica.
3. Problemas encontrados y soluciones
En el proceso de adelgazamiento, no era una navegación suave. Cuando pensé que el trabajo estaba hecho y comencé el proyecto, descubrí que la startup falló y el frasco en conflicto.
1. Resuelva los conflictos de paquetes JAR, analice las dependencias de los paquetes JAR a través del comando MVN y encuentre los paquetes JAR en conflicto y unifique la versión.
En Eclipse, creé una nueva construcción Maven. Al principio, probé la dependencia de MVN: árbol, y analicé la dependencia del paquete JAR en su conjunto, pero no encontré la dependencia del paquete JAR de problemas. Luego probé la dependencia de MVN: Tree -Dverbosa, y analicé toda la dependencia implícita indirecta en su conjunto y aún no encontré la dependencia del paquete JAR de problemas.
En este punto, sospecho que no hay un paquete JAR en el proyecto. Después de un empaque repetido, veo que este problema está en la dependencia del proyecto, pero está oculto demasiado profundamente. Por lo tanto, solo los análisis se pueden realizar para un solo paquete JAR:
MVN Dependency: Tree -dverbose -dincludes = xx: xx: xx (xx: xx: xx correspondiente al paquete jar groupid: artifactID: versión)
Después de usar DinCludes, se encuentra la relación de dependencia del paquete JAR correspondiente y el paquete JAR se excluye en el proyecto. Después de empacar nuevamente, el proyecto comienza con éxito y el problema se resuelve.
2. Durante el proceso de embalaje, algunos subproyectos no usaron el complemento Spring-Boot-Maven-Plugin, pero usaron Maven-Jar-Plugin para empaquetarlo directamente en un frasco ejecutable. Después de combinar la configuración de adelgazamiento del frasco grueso, se descubrió que el frasco que podría haber dependido de los interoperables ahora ha fallado. Dado que los frascos de grasa están adelgazando, solo los frascos de proyectos cuyo código se cambia con frecuencia se deja, y las dependencias no se pasan en frascos ejecutables, por lo que debe depender explícitamente del paquete JAR del proyecto requerido en este proyecto para garantizar la integridad del proyecto.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.