spring boot 프로젝트 fat jar 다이어트 실현
spring cloud 는 spring boot 프로젝트 를 구축 하고 각 프로젝트 의 차원 을 세분 화하 여 결합 도 를 낮 추 는 목적 을 달성 하 며 프로젝트 간 에 restful 통신 을 바탕 으로 합 니 다.
프로젝트 를 포장 하 는 과정 에서 spring-boot-maven-plugin 플러그 인 을 사용 하여 포장 합 니 다.fat jar 가 생 성 되 었 습 니 다.이 jar 가방 을 압축 해제 하면 프로젝트 가 의존 하 는 jar 가방 이 BOOT-INF 에 저 장 된 lib 폴 더 에 저 장 된 것 을 발견 할 수 있 습 니 다.여러 개의 키 항목 을 분석 한 결과 같은 jar 가방 이 절대 다 수 를 차지 한 다음 에 온라인 환경 에 배치 할 때마다 각 시스템 의 공동 jar 는 서버 에 중복 방치 되 어 있 습 니 다.따라서 자 연 스 럽 게 공 통 된 jar 가방 이나 자주 바 뀌 지 않 는 jar 가방 을 빼 내 고 단독 한 부 를 정리 한 다음 각 하위 프로젝트 가 시 작 될 때 외부 로 불 러 와 fat jar 다이어트 의 목적 을 달성 할 수 있 는 방법 이 있 을 지 생각 합 니 다.
2.fat jar 다이어트
상기 분석 을 통 해 관련 자 료 를 조회 하고 다음 절 차 를 정리 하여 jar 가방 다이 어 트 를 진행 합 니 다.
1.항목 별로 spring-boot-maven-plugin 플러그 인공식 문서을 설정 하여 fat jar 에 남아 있 는 jar 패 키 지 를 생 성 합 니 다.
<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
</excludeGroupIds> -->
<includes>
<include>
<groupId>xx</groupId>
<artifactId>xx</artifactId>
</include>
<include>
<groupId>xx</groupId>
<artifactId>xx</artifactId>
</include>
</includes>
</configuration>
</plugin>
상기 코드 와 같이 excludeGroupIds 나 includes,또는 다른 탭 을 사용 하여 상황 을 구체 적 으로 볼 수 있 습 니 다.2.프로젝트 의존 jar 에서 fat jar 에 저장 하고 싶 지 않 은 jar 가방 을 추출 합 니 다.
방법 1(추천):프로젝트 pom 파일 에 maven 의존 플러그 인 추가공식 문서
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- <outputDirectory>E:/lib</outputDirectory> -->
<excludeGroupIds>
<!-- fat jar jar groupId ( , )-->
</excludeGroupIds>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
라벨 의 구체 적 인 의 미 는 공식 문 서 를 보십시오.maven 을 사용 하여 프로젝트 를 포장 할 때 maven 명령 을 사용 합 니 다:
화면 음악 n clean install-DMaven.test.skip=true-Output Directory=E:/lib(-Output Directory=E:/lib 는 명령 동적 지정 항목 에 의존 하 는 jar 패키지 내 보 내기 경로 입 니 다.항목 에 outputDirectory 의 태그 값 을 지정 하면 이 동적 경 로 를 덮어 씁 니 다)
플러그 인 을 설정 하여 이 명령 을 실행 하면 프로젝트 에서 excludeGroupIds 탭 에 설 정 된 jar 패 키 지 를 제외 하고 나머지 는 지정 한 디 렉 터 리 에 가 져 옵 니 다.이로써 fat jar 에 남아 있 는 jar 패 키 지 를 추출 할 수 있 습 니 다.
방법 2:프로젝트 에 maven 의존 플러그 인 을 추가 하지 않 고 프로젝트 에 뮤 직 비디오 를 사용 하여 jar 패키지 에 의존 하 는 명령 을 직접 복사 합 니 다.이 방식 은 각각 키 항목 에 의존 하여 복사 해 야 합 니 다.하위 항목 은 적 게 사용 할 수 있 습 니 다.
화면 음악 n dependency:copy-dependencies-Output Directory=E:/lib(동적 지정 디 렉 터 리 가 없 으 면 기본적으로 프로젝트 의 target 경로 에서 dependency 디 렉 터 리 를 생 성 합 니 다)
각 항목 을 내 보 내 는 의존 jar 가방 을 하나의 폴 더 에 통일 적 으로 넣 고 중복 을 제거 하 며 fat jar 에 남 겨 진 의존 jar 가방 을 삭제 합 니 다.이로써 fat jar 에 남 은 jar 가방 을 제거 합 니 다.
3.추출 한 jar 패 키 지 를 서버 의 특정한 경로 에 두 고 프로젝트 시작 스 크 립 트 를 설정 하여 외부 로 불 러 옵 니 다.
nohup java -Dloader.path="xx/lib" -jar xx.jar
-loader.path 는 외부 로 딩 주소 입 니 다.
이로써 살 이 빠 졌 습 니 다.프로젝트 를 포장 한 jar 가방 에서 볼 수 있 습 니 다.BOOT-INF 의 lib 에는 필요 한 jar 가방 만 있어 fat jar 의 크기 를 크게 줄 였 습 니 다.
pom 의 설정 은 마이크로 서비스 시스템 에 사용 되 며,통 일 된 설정 을 형성 할 수 있 으 며,각 항목 의 jar 패키지 의존 관 계 는 구체 적 인 상황 에 따라 변 경 됩 니 다.
3.직면 한 문제 와 해결 방법
살 을 빼 는 과정 에서 순탄 하지 않 았 습 니 다.큰 성 과 를 거 두 었 다 고 생각 했 을 때 프로젝트 를 시작 하 는 데 실 패 했 고 jar 충돌 을 발 견 했 습 니 다.
1.jar 가방 충돌 을 해결 하고 mvn 명령 을 통 해 jar 가방 의 의존 관 계 를 분석 하 며 충돌 jar 가방 을 찾 아 버 전 을 통일 합 니 다.
eclipse 에서 새로운 Maven Build 를 만 들 었 습 니 다.처음에 저 는 mvn dependency:tree 를 시 도 했 습 니 다.전체적으로 jar 가방 의존 도 를 분 석 했 지만 문제 jar 가방 의 의존 관 계 를 찾 지 못 했 습 니 다.이 어 저 는 mvn dependency:tree-Dverbose 를 시 도 했 습 니 다.모든 간접 적 인 의존 도 문제 jar 가방 의 의존 관 계 를 분석 하지 못 했 습 니 다.
이로써,나 는 프로젝트 에 이 jar 가방 이 없다 고 의심 했다.반복 적 으로 포장 한 후에,나 는 이 문제 의 jar 가방 이 확실히 프로젝트 의존 에 있 고,단지 너무 깊이 숨 어 있 는 것 을 보 았 다.따라서 하나의 jar 가방 만 분석 할 수 있 습 니 다.
화면 음악 dependency:tree-Dverbose-Dincludes=xx:xx:xx(xx:xx:xx 대응 jar 패키지 의 groupId:artifactId:version)
Dincludes 를 사용 한 후 jar 가방 에 대한 의존 관 계 를 찾 았 고 프로젝트 에서 이 jar 가방 을 제외 하고 다시 포장 한 후 프로젝트 가 시작 되 어 문제 가 해결 되 었 습 니 다.
2.포장 과정 에서 일부 세분 화 된 하위 항목 은 spring-boot-maven-plugin 플러그 인 을 사용 하지 않 고 maven-jar-plugin 을 사용 하여 실행 가능 한 jar 로 직접 포장 한 다음 에 fat jar 다이어트 설정 을 결합 한 결과 서로 통 하 는 jar 에 의존 할 수 있 었 는데 지금 은 효력 을 잃 었 습 니 다.fat jar 다이어트 후의 lib 에 서 는 코드 가 자주 바 뀌 는 프로젝트 의 jar 만 남 았 기 때문에 의존 관 계 는 실행 가능 한 jar 에서 전달 되 지 않 았 기 때문에 이 프로젝트 에서 필요 한 프로젝트 의 jar 가방 에 외 현적 으로 의존 해 야 프로젝트 의 완전 성 을 확보 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.