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 를 만 들 겠 습 니 다.블 로그 방문 이 정상 으로 돌아 가 고 교 류 를 환영 합 니 다.
영혼 추궁
  • 어린이 신발 프로젝트 팀 이 사용 하 는 구축 도구 가 많 을 때 Gradle 은 Gradle 에서 어떻게 표시 되 는 지 아 십 니까?
  • 사용자 정의 starter,공식 표준 starter 의 구조 가 어떤 지 아 세 요?
  • 이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기