Spring Boot 프로젝트 계승 의존 으로 인 한 컴 파일 실패 문 제 를 기록 합 니 다.
spring-boot-starter-parent
POM 을 설정 할 때 정상적으로 컴 파일 하여 실행 할 수 있 지만, 정식 출시 시 상속 회사 의 통 일 된 플러그 인 집합 Parent POM 으로 전환 해 야 합 니 다.(여기 서 잠시 common - plugin 이 라 고 부 릅 니 다. 이 플러그 인 은 지속 적 인 통합 컴 파일 자동화 플러그 인 을 편리 하 게 실행 하기 위해 서 입 니 다. 예 를 들 어 maven-deploy-plugin
, maven-docker-plugin
등 플러그 인 을 실행 한 후에 문제 가 발생 했 습 니 다. 컴 파일 이 통과 되 지 않 고 유사 한 힌트 는 종 류 를 찾 을 수 없 으 며 기호의 오류 메 시 지 를 찾 을 수 없습니다.Spring Boot 홈 페이지 문서 에 따 르 면 프로젝트 는 계승
spring-boot-starter-parent
을 부모 POM 으로 설정 해 야 한 다 는 것 을 잘 알 고 있 습 니 다.<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.2.RELEASEversion>
parent>
.....
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
이와 같은 설정 은 이때 컴 파일
mvn clean package
을 실행 하 는 데 문제 가 없습니다. 그러나 현재 의 상황 은 우리 의 프로젝트 가 자신의 Parent POM common-plugin
을 계승 해 야 합 니 다. 이때 컴 파일 을 실행 하 는 방식 은 통 하지 않 습 니 다. 하나의 POM 파일 에서 하나의 Parent 만 계승 할 수 있 기 때 문 입 니 다. 물론 우 리 는 spring-boot-starter-parent
을설정 common-plugin
에 의존 하면 됩 니 다! 우선 이런 방식 은 문제 가 없 지만 고려 common-plugin
공용 POM 사용자 정의 플러그 인 집합 으로 설정 후 회사 의 모든 프로젝트 그룹 에 의 해 계승 되 어 사 용 됩 니 다. 또한 각종 jar 버 전 의존 문제 가 발생 하 는 지 는 말 할 것 도 없 이 Spring 과 관련 된 jar 버 전 의존 문 제 는 처리 하기 어렵 습 니 다. 이 를 고려 하면 비용 이 너무 높 고 위험 이 큽 니 다. 그러면 어떻게 해 야 합 니까? 사실 Spring Boot 홈 페이지 문서 에서 드 립 니 다.해결 방안 이 나 왔 습 니 다. 프로젝트 부모 POM 설정 은 다음 과 같 습 니 다.<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>2.0.2.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
위의 설정 역시 Parent POM 을 계승 하 는 방식 과 같은 역할 을 하 며, 다 중 Parent 가 지원 하지 않 는 문 제 를 해결 할 수 있 습 니 다. 한 가지 더 말씀 드 리 고 싶 은 것 은 Muti 프로젝트 의 각 하위 모듈 에 의존 을 다시 설정 하지 않 아 도 됩 니 다
spring-boot-dependencies
. 부모 프로젝트 의 POM 만 계승 하면 됩 니 다.. 하위 모듈 에 이 의존 도 를 다음 과 같이 추가 하면 컴 파일 이 잘못 되 었 습 니 다.<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
dependency>
따라서 하위 모듈 은 이 의존 도 를 다시 추가 할 필요 가 없습니다. 또한 부모 프로젝트 가
spring-boot-dependencies
의존 도 를 계승 한 후 하위 모듈 이 부모 프로젝트 POM 을 계승 하면 하위 모듈 이 관련 의존 도 를 사용 할 때 version 버 전 을 지정 할 필요 가 없습니다. 예 를 들 어 하위 모듈 설정 은 다음 과 같 습 니 다.<dependencies>
......
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
dependencies>
의존 version 을 지정 할 필요 가 없습니다. 이것 은
spring-boot-dependencies
POM 에서 해당 하 는 버 전 을 정 의 했 기 때 문 입 니 다. Maven 창고 pom 파일 에서 의존 하 는 버 전 정 의 를 다음 과 같이 볼 수 있 습 니 다.<dependencies>
......
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.0.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<version>2.0.2.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
<version>2.0.2.RELEASEversion>
dependency>
dependencies>
자, 여기 서 Parent POM 의존 으로 인 한 컴 파일 실패 문 제 를 기본적으로 해결 할 수 있 습 니 다. 그러나 일이 끝나 지 않 았 습 니 다. 위 설정 을 수정 한 후에 도 하위 항목 의 한 파일 에 다시 컴 파일 하면 클래스 를 찾 을 수 없고 기 호 를 찾 을 수 없습니다. 오류 정 보 는 다음 과 같 습 니 다.
.....
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project bop-service-crm: Compilation failure: Compilation failure:
[ERROR] /Users/wanyang3/git/mutiproject/sub_project_service/src/main/java/com/test/service/modul/impl/ModuleServiceImpl.java:[21,47]
[ERROR] : RestController
[ERROR] : org.springframework.web.bind.annotation
[ERROR] /Users/wanyang3/git/mutiproject/sub_project_service/src/main/java/com/test/service/modul/impl/ModuleServiceImpl.java:[47,2]
[ERROR] : RestController
......
What? IDE 에서 볼 수 있 는 이것
org.springframework.web.bind.annotation.RestController
은 있 습 니 다. 부모 POM 에서 Parent POM common-plugin
코드 의존 을 주석 해 보 세 요. 컴 파일 을 실행 하면 통 과 될 수 있 는 지, 문 제 를 설명 할 수 있 는 지 common-plugin
에서 나 왔 는 지 알 수 있 습 니 다.자세히 살 펴 보면
org.springframework.web.bind.annotation.RestController
이 종 류 는 spring - web 가방 에 속 하 는 것 으로 나 타 났 다. 그리고 이 두 개의 Parent POM 에서 spring 과 관련 된 버 전 을 조회 한 결과 놀 라 운 발견 은 모두 각자 의 spring 버 전 을 정의 했다. common-plugin
에 서 는 3.0.6.RELEASE
이 정의 되 었 고 spring-boot-dependencies
Parent POM 에 서 는 4.3.14.RELEASE
이 정의 되 었 다.후자 만 사용 할 때 컴 파일 은 통과 할 수 있 습 니 다. 전자 만 사용 할 때 컴 파일 이 통과 되 지 않 습 니 다. 다음은 Spring 버 전 4.3.14.RELEASE
을 통일 하여 컴 파일 이 통 과 될 수 있 는 지 확인 하 겠 습 니 다.저 희 는 덮어 쓰기
common-plugin
의 spring. version 방식 으로 버 전 통일 을 완성 합 니 다. 먼저 위 에 설명 한 코드 를 놓 은 다음 프로젝트 부모 POM 에 spring. version 속성 을 설정 합 니 다.<parent>
<artifactId>common-pluginartifactId>
<groupId>com.plugin.commongroupId>
<version>1.1.0version>
parent>
......
<properties>
......
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<java.version>1.8java.version>
<spring.version>4.3.14.RELEASEspring.version>
properties>
이렇게 하면 프로젝트 를 4.3.14. RELEASE 버 전 으로 지정 할 수 있 습 니 다! 컴 파일 을 다시 실행 하 니 컴 파일 이 통과 되 었 습 니 다!! 버 전이 충돌 에 의존 하 는 문제 인 것 같 습 니 다!
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nginx 역방향 에이전트 Jenkins 설정 방법글 목록 Nginx 의 jenkins - site. conf 부분 설정 Windows JNLP slaves 가 Nginx 를 통 해 Jenkins 에 연결 할 수 없 는 문 제 를 해결 합 니 다 Nginx 의 je...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.