1. 프로젝트 배경
Spring Cloud는 Spring Boot 프로젝트를 구축하고 각 프로젝트의 수준을 개선하며 커플 링을 줄이기위한 목적을 달성합니다. 프로젝트는 편안한 커뮤니케이션을 기반으로합니다.
프로젝트를 포장하는 과정에서 스프링 보트-마비 플러그 인 플러그인을 사용하여 패키지를 사용하면 뚱뚱한 항아리가 생성됩니다. JAR 패키지가 압축되지 않은 경우 프로젝트에 의존하는 JAR 패키지가 Boot-Inf의 LIB 폴더에 저장되어 있음을 알게됩니다. 여러 하위 프로젝트를 분석 한 후 동일한 JAR 패키지가 대다수를 차지한다는 것을 알게 될 것입니다. 그런 다음 온라인 환경에 배치 될 때마다 각 시스템의 공통 항아리는 실제로 서버에서 반복적으로 보호됩니다. 따라서 자연스럽게 수정되지 않은 공통 JAR 패키지 또는 항아리 패키지를 추출하는 방법이 있는지 자연스럽게 생각하고 별도의 사본을 정렬 한 다음 외부 하중을 사용하여 뚱뚱한 항아리로 체중 감량을 목적으로합니다.
2. 뚱뚱한 병 슬리밍
위의 분석 및 관련 정보를 검토 한 후에는 Jar-Package Slimming을 만드는 다음 단계를 정리했습니다.
1. 각 프로젝트는 Spring-Boot-Maven-Plugin 플러그인 (공식 문서)을 구성하여 Fat Jar에 보관 된 JAR 패키지를 생성합니다.
<플러그인> <groupid> org.springframework.boot </groupid> <artifactid> Spring-boot-maven-plugin </artifactid> <configuration> <layout> zip </layout> <!-<lexcroupids> org.springframework.boot, org.springframework.cloud, org. tk.mybatis, mysql, com.alibaba, javax.persistence, io.springfox, org.springframework.session </excludeGroupIds> -> <clointer> <group> xx </groupid> <artifactid> xx </artifactid> <group </conture> <artifactid> xx </artifactid> </include> </conlutic> </configuration> </plugin>
위의 코드와 마찬가지로 상황에 따라 제외 GroupIds 또는 기타 태그를 포함시킬 수 있습니다.
2. 프로젝트 의존성 JAR에서 Fat Jar에 보관하지 않으려는 JAR 패키지를 추출하십시오.
메소드 1 (권장) : Project POM 파일에 Maven Dependency 플러그인 추가 (공식 문서)
<Plugin> <groupId> org.apache.maven.plugins </groupid> <artifactid> maven-delependent-plugin </artifactid> <bersion> 3.1.1 </version> <execution> <id> copy-dependents </id> <case> <goving </phase> goving> </goal> </goal>> </doging> </goald> <</gover-dependents <! <outputDirectory> e :/lib </outputDirectory>-> <excludeGroupIds> <!-Jar에서 JAR 패키지의 Fat GroupId 속성 값 (다중, 분리)에 남아 있습니다-> </excludeGroupIds> <overwritesnapShots> true </configuration> </execution> </execution> </execution> </execution>
태그의 구체적인 의미는 공식 문서를 확인하십시오.
Maven을 사용하여 프로젝트를 포장 할 때 Maven 명령을 사용하십시오.
mvn clean install -dmaven.test.skip = true -doutputdirectory = e :/lib (-doutputdirectory = e : e :/lib는 프로젝트가 동적으로 부탁하는 JAR 패키지로 내보내는 경로입니다. 출력 디렉토리의 레이블 값이 프로젝트에서 지정되면이 동적 경로는 무의미합니다.
FirctroupIds 태그에 구성된 JAR 패키지를 제외하고 구성 플러그인 이이 명령을 실행 한 후 나머지 프로젝트는 지정된 디렉토리로 가져오고 Fat Jar의 초과 JAR 패키지가 추출됩니다.
방법 2 : 프로젝트에 Maven Dependency 플러그인을 추가하지 말고 MVN을 사용하여 프로젝트의 JAR 패키지에 의존하는 명령을 복사하십시오. 이 방법은 각 하위 프로젝트의 종속성 복사를 하나씩 복사해야하며, 일부 하위 프로젝트를 사용할 수 있습니다.
MVN 종속성 : COPY -DEPENGENCIES -DOUTPUTDIRECTORY = E :/LIB (디렉토리가 동적으로 지정되지 않은 경우 프로젝트의 대상 경로에서 기본적으로 종속성 디렉토리가 생성됩니다)
각 프로젝트에서 내보낸 종속성 JAR 패키지를 폴더에 넣고 복제를 제거한 다음 Fat Jar에 예약 된 종속성 JAR 패키지를 삭제 한 다음 Fat Jar에서 과도한 JAR 패키지를 제거합니다.
3. 추출 된 JAR 패키지를 서버의 특정 경로에 놓고 프로젝트 시작 스크립트를 구성한 다음 외부로로드하십시오.
nohup java -dloader.path = "xx/lib"-jar xx.jar
-dloader.path는 외부 로딩 주소입니다.
슬리밍 후 프로젝트가 포장 된 후 JAR 패키지에서 볼 수 있습니다. 부츠 인프 아래의 LIB에는 필요한 항아리 패키지 만 있으므로 Fat Jar의 크기가 크게 줄어 듭니다.
POM의 구성은 마이크로 서비스 시스템에서 통합 구성을 형성하는 데 사용될 수 있으며, 각 프로젝트의 JAR 패키지 종속성은 특정 상황에 따라 변경됩니다.
3. 문제가 발생하고 해결책
슬리밍 과정에서는 매끄러운 항해가 아니 었습니다. 작업이 끝났다고 생각하고 프로젝트를 시작했을 때 스타트 업이 실패하고 Jar가 상충되었다는 것을 알았습니다.
1. JAR 패키지 충돌을 해결하고 MVN 명령을 통해 JAR 패키지의 종속성을 분석하고 충돌하는 JAR 패키지를 찾고 버전을 통합하십시오.
일식에서 나는 새로운 Maven 빌드를 만들었습니다. 처음에 나는 MVN 의존성을 시도했고 트리를 시도하고 JAR 패키지 의존성을 전체적으로 분석했지만 문제 JAR 패키지의 종속성을 찾지 못했습니다. 그런 다음 MVN 의존성을 시도했지만 트리 -dverbose를 시도하고 모든 간접 암시 적 의존성을 전체적으로 분석했지만 여전히 문제 JAR 패키지의 종속성을 찾지 못했습니다.
이 시점에서 프로젝트에 JAR 패키지가 없다고 생각합니다. 반복 포장 후, 나는이 문제가 실제로 프로젝트 의존성에 있다는 것을 알지만 너무 깊게 숨겨져 있습니다. 따라서 단일 JAR 패키지에 대한 분석 만 수행 할 수 있습니다.
MVN 의존성 : 트리 -dverbose -dincludes = xx : xx : xx (xx : xx : xx jar package groupid에 해당 : artifactid : version)
DINCLUDES를 사용한 후 해당 JAR 패키지의 종속성 관계가 발견되고 JAR 패키지는 프로젝트에서 제외됩니다. 다시 포장 한 후 프로젝트가 성공적으로 시작되고 문제가 해결됩니다.
2. 포장 과정에서 일부 하위 프로젝트는 스프링 부츠 마이븐-플러그 인 플러그인을 사용하지 않았지만 Maven-Jar-Plugin을 사용하여 런닝 가능한 항아리에 직접 포장했습니다. Fat Jar Slimming 구성을 결합한 후 상호 운용 가능한 항아리에 의존 할 수있는 항아리가 실패한 것으로 나타났습니다. 뚱뚱한 항아리가 슬림하므로 코드가 자주 변경되는 프로젝트의 항아리 만 남아 있고 종속성은 런닝 가능한 항아리에 전달되지 않으므로 프로젝트의 완전성을 보장하기 위해이 프로젝트에서 필요한 프로젝트의 JAR 패키지에 명시 적으로 의존해야합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.