티스토리 뷰
1. 메이븐은 dependency를 중심으로 구조를 이루고 있다.
2. Dependency라고 하면 Maven프로젝트가 의존하는 artifact를 말한다.
3. Transitive Dependency는 프로젝트에서 의존하는 artifiact의 의존성을 말하는 것으로
3-1 이것 때문에 수많은 층의 구조가 형성된다.
3-2 cyclic dependency는 허용하지 않는데, 즉 A가 B를 의존하고 B가 C를 의존하는데 C가 A를 의존하는 경우이다.
4. Dependency Management는 사용하고 있는 artifact의 버전을 명시하여 그 버전을 사용하도록 하는 기능이다.
4-1 의존하고 있는 artifact가 의존하는 artifact도 지정할 수 있다.
5. Dependency Mediation은 의존성 구조를 검색 후 여러버전의 artifact가 검색된 경우 어떤 것을 사용할지를 결정한다.
5-1 공식 docuement에는 Nearest Definition이 사용된다고 명시하고 있는데,
5-2 A가 B를 의존, A는 2.0의 D를 사용하고 B는 1.0의 D를 사용할 경우 2버전이 결과적으로 다운로드된다.
5-3 보통은 가장 최신버전이 추가된다고 생각하면 된다.
6. Excluded Dependencies는 특정한 의존라이브러리를 제거할 수 있는 기능이다.
6-1 최신의 스프링부트 pom을 보면 Junit 5저번에서 특정 엔진을 걷어 내는 부분이 보인다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
7. Optional Dependencies - 의존라이브러리를 선택적으로 사용되도록 할 수 있다.
8. Dependency Scope
8-1 Compile - 기본값. 프로젝트의 모든 classpath(test, compile, run)상에 위치하게 된다.
8-2 Provided - Compile과 동일한데 JDK나 컨테이너에서 제공될 것으로 간주하는 의존성이다.
8-3 Runtime - Compile에는 사용되지 않지만 DB 드라이버처럼 runtime과 test에는 필요한 것들
8-4 Test -test classpath에만 있으면 된다. ex) junit, mockito
8-5 System - provided와 비슷하지만 명시적으로 jar이 추가되어야 한다. 보통은 파일경로로 추가할 때 쓴다.
8-6 Import - POM의 의존성을 가져와 사용한다.
9. 의존성은 Maven Dependency Plugin으로 관리가 된다.
9-1 이 플러그은 4가지 goal이 있는데
9-1-1 dependency:tree - 의존성 트리를 생성한다. 충돌이 발생했을 때 해결에 도움이 된다.
9-1-2 dependency:go-offline 보통 외부시스템에서 많이 사용하는데 jenkins이나 circle ci에서 사용하여 캐싱한다.
9-1-3 dependency:purge-local-repository 로컬 저장소가 이상할 때 강제로 저장소의 내용물을 삭제한다.
9-1-4 dependency:sources 모든 의존성에 대한 소스코드를 받아온다.
'Side Technologies' 카테고리의 다른 글
Maven : Build Lifecyle (0) | 2020.07.20 |
---|---|
Maven : 표준 디렉토리 레이아웃 (0) | 2020.07.20 |
Maven : Maven POM (0) | 2020.07.20 |
Maven : Maven Coordinates와 Repository (0) | 2020.07.20 |
Maven : Visual Studio Code로 메이븐 프로젝트 생성 (0) | 2020.07.20 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- one-to-many
- 외부파일
- 로그인
- 설정
- XML
- 설정하기
- Spring Security
- one-to-one
- MYSQL
- crud
- Validation
- form
- Spring
- spring boot
- Angular
- WebMvc
- 상속
- 스프링
- RestTemplate
- login
- 스프링부트
- Many-To-Many
- mapping
- Rest
- jsp
- 자바
- 하이버네이트
- Security
- hibernate
- 매핑