Maven optional 키워드 투철 도 해 를 자세히 설명 합 니 다.
'Spring Boot Starter 사용자 정의 방법'을 쓰 려 고 했 지만 Starter 의 디자인 이념 과 그 중의 관건 을 잘 이해 하기 위해 세부 내용 을 따로 추출 하여 설명 하 였 다.
Maven pom.xml 에 서 는 의존 항목 에 다음 과 같은 코드 가 있 는 것 을 자주 볼 수 있 습 니 다.
<dependency>
<groupId>sample.ProjectA</groupId>
<artifactId>Project-A</artifactId>
<version>1.0</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
여기 <optional>true</optional>
이 무슨 뜻 이 죠?optional 키워드 의 비밀
낡은 규칙,그림 을 그 려 문 제 를 설명 한다.
procject C 는 procject A 에서 온 두 개의 클래스(OptionalFeatureaclass)와 procject B 의 클래스(OptionalFeatureBClass)를 사 용 했 기 때문에 procject C 가 packageA 와 packageB 에 의존 하지 않 으 면 컴 파일 에 실패 합 니 다.
procject D 는 procject C 에 의존 하지만 procject D 에 있어 클래스(OptionalFeatureaclass)와 클래스(OptionalFeatureBClass)는 선택 할 수 있 는 특성 이기 때문에 최종 war/ejb package 에 불필요 한 의존 을 포함 하지 않도록
<optional>
을 사용 하여 현재 의존 이 선택 가능 하 다 고 밝 히 고 기본 적 인 상황 에서 다른 프로젝트 에 계승 되 지 않 습 니 다(예 를 들 어 자바 의 final 클래스 와 같 습 니 다.다른 부류 에 물 려 받 을 수 없다)procject D 가 procject C 의 optional Featureaclass 를 사용 해 야 한다 면 어떻게 합 니까?프로젝트 D 의 pom.xml 에 설명 procject A 의존 도 를 명시 적 으로 추가 하고 다음 그림 을 계속 봐 야 합 니 다.
Project D 는 Project A 의 OptionalFeatureaclass 를 사용 해 야 합 니 다.그러면 Project D 의 pom.xml 파일 에 Project A 에 대한 의존 도 를 명시 적 으로 추가 해 야 합 니 다.
이 쯤 되면 Maven 이 왜 optional 키 워드 를 디자인 해 야 하 는 지 이해 할 수 있 습 니 다.데이터 베 이 스 를 지속 적 으로 유지 하 는 프로젝트(Project C)를 가정 하면 더 많은 유형의 데이터 베 이 스 를 지속 적 으로 디자인 하기 위해 서 입 니 다.예 를 들 어 Mysql 지구 화 디자인(Project A)과 Oracle 지구 화 디자인(Project B)은 우리 프로젝트(Project D)가 사용 해 야 할 Project C 의 지구 화 디자인 입 니 다.my sql 드라이브 를 도입 하고 Oacle 드라이브 를 도입 할 수 는 없 기 때문에 우 리 는 명시 적 으로 지정 해 야 한 다 는 것 이 바로 이 이치 입 니 다.
실제 사례
spring-boot-actuator pom.xml 파일 중 20 개가 넘 는 의존 도 는 optional 입 니 다.
Spring Boot 는 불필요 한 의존 도 를 최종 jar package 에 포함 시 킬 수 없 기 때문에 spring boot actuator 프로젝트 를 사용 하여 최종 적 으로 생 성 된 jar package 에는 20 여 개의 의존 jar 가 포함 되 어 있 지 않 습 니 다.어떤 것 을 사용 하려 면 프로젝트 에 명시 적 으로 가입 하면 됩 니 다.
다음 글 에서 Spring Boot Starter 를 사용자 정의 하 는 것 도 이 전략 입 니 다.starter 는 특정한 기능 을 포함 하여 다른 프로젝트 에 서 비 스 를 제공 하기 때 문 입 니 다.본 논문 의 Project C 와 같은 역할 입 니 다.여기까지 optional 의 비밀 을 이해 하 셨 습 니까?
역방향 응용
Project C 가 도입 한 의존 도가
<optional>true</optional>
을 추가 하지 않 으 면 Project D 는 Project C 에 의존 해 야 하 는데 Project A 류 에 만 사용 하면 어떻게 되 나 요?Maven 도 해결 방법 이 있 습 니 다.exclusion 키 워드 를 사용 하면 더 이상 말 하지 않 아 도 이전 코드 에서 알 수 있 습 니 다.
<dependencies>
<dependency>
<groupId>top.dayarch.demo</groupId>
<artifactId>Project-C</artifactId>
<exclusions>
<exclusion>
<groupId>top.dayarch.demo</groupId>
<artifactId>Project-B</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
총결산여기 서 앞으로 디자인 기능 성 의존 을 할 때 의존 관 계 를 어떻게 디자인 하 는 지 알 아야 합 니 다.저 는 optional 형식 을 사용 하 는 것 을 추천 합 니 다.쉽게 말 하면 당신 이 디자인 한 의존 요 리 는 모든 요리 가 있 습 니 다.어떤 요 리 를 먹고 싶 은 지'안 채 명'만 있 으 면 됩 니 다.그 다음 에 우 리 는 공식 기준 으로 사용자 정의 starter 를 만 들 겠 습 니 다.블 로그 방문 이 정상 으로 돌아 가 고 교 류 를 환영 합 니 다.
영혼 추궁
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nexus에서 자체 Maven 리포지토리를 구축하고 sbt에서 사용Scala 현장에서 프로젝트 종속성을 폐쇄된 Maven 리포지토리로 관리할 수 없는가 하는 이야기가 오르기 때문에, 일단 로컬상에서 간이로 검증한 내용을 비망으로 남깁니다. 프로덕션 용 리포지토리 서버는 별도로 현장...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.