프레임워크 강의-2

robin Han·2023년 3월 13일
0

Spring

목록 보기
2/13

What is Maven

  1. 프로젝트를 관리
    • pom.xml 파일을 이용해 jar 다운로드하여 관리
    • 프로젝트 일관된 구조로 관리
  2. 빌드 자동화
    • 일관성 있는 환경제공 , 소스코드를 실행코드로 변호나하여 배포

프로젝트 관리 기능

  • 정향화된 프로젝트 디렉토리 구조관리
  • 의존성 관리기능
  • 빌드 프로세스 관리 (pom.xml)

의존 관계 설정

3가지 필수 필드

  • groupId: 프로젝트 조직 고유 도메인
  • artifactId: 프로젝트 명
  • version: 프로젝트 버전\
  • dependecy: 프로젝트 의존 관계의 라이브러리 관리
  • junit : testing 용 파일

Maven repository

  1. 지역(local) 저장소 : 메이븐을 빌들할때 다운받는 라이브러리들의 플러그인을 관리하는 저장소

  2. 중앙저장소: 오픈소스 , 메이븐 플러그인 관리하는 저장소

  3. 원격 저장소 :중앙 저자소에 없는 라이브러리를 관리하기위해 따로 설치하여 관리

    검색 절차:

  4. 지역 (로컬) 저장소에 라이브러리가 찾고 있으면 사용 없으면 중앙저장소로

  5. 중앙저장소에 라이브러리를 찾고 있으면 로컬저장소에 저장 없으면 원격 저장소로 만약 원격 저장소가 없으면 에러

  6. 원격저장소 검색, 라이브러리찾으면 로컬저장소에 저장, 없으면 에러

3개 필수 필드

groupId: 프로젝트 조직 고유 도메인
artifactId: 프로젝트 명
version:프로젝트 버전
scope: 의존 라이브러리를 적용할수있는 시점을 제한

적용 스코프

scopeDescription
compile스코프를 설치하지 않을때 기본
provided컴파일시 직접 의존성 참조, 런타임시에 다른 환경 의존성 제공
runtime애플리케이션 실행될때만 사용 라이브러리 사용할때
testJUNIT
systemjar 파일 직접 제공
import의존관계 설정 프로젝트 import

Maven 라이프 사이클

3개의 라이프 사이클: build, clean , site

  • build : 라이프사이클여러단계의 phase 로 나누어져있고, 컴파일 + 테스트 + 패키징 + 배포 순서이다.
  • clean : 이전에 빌드했던 모든 파일(target directory)를 삭제한다.
  • site : 생성된 문서들을 해당 사이트에 배포한다.

페이즈들

페이즈 PhaseDescription
리소스 준비리소스를 준비되어 복사
컴파일소스코드를 컴파일한다
테스트Junit 같은 프레임 워크로 단위테스트를 한다
패키지pom.xml 값 (jar, war ,ear) 따라 형식에 맞게 압축
인스톨패키지를 로컬 저장소에 배포한다
배포원격 메이븐 저장소에 압축한 파일을 배포한다

빌드 사이클은 여러 페이즈들로 구성되어있고
여러개의 은 하나의 페이즈에서 수행한다.
페이즈 별로 플러그인이 작업 해당 작업들을 이라고함

페이즈 말그대로 해당 단계들을 말하고 goal은 해당 작업들을 말함.

빌드 라이프 사이클

  • 컴파일 + 테스트 + 패키징 + 배포
  • 골: 각 수행되는 작업
  • 플러그인: 골 단계에 연결, 수행하는 역할, 골을 설정

What is Gradle

  • JVM 에서 실행
  • 저장소 관리 기능
  • 중앙저장소 maven과 공유 가능
  • 다양한 플러그인 제공
  • Graddle Wrapper 를 선언된 버전을 호출하여 미리 다운받어서 사용 프로젝트에 종속되어 버젼에 맞게 빌드 가능
  • Maven 처럼 tag 형식이 아님, Groovy 형식
build.gradle 설정

plugin: task( 작업단위)의 집합

  • java-library: 자바 플러그인 기능 확장하여 API 형식으로 제공

repository: 의존 관계 저장소

  • mavenCentral(): mavenCentral
    depency:

Implementation: 라이브러리의 의존성 추가
CompileOnly: 컴파일과정에만 필요한 라이브러리 의존성 추가
CompileClasspath: 컴파일하는 시점의 class path
RuntimeOnly: 코드가 실행되는 런타임에만 필요
RuntimeClasspath: 런타임에 필요되는 class path

java-library는 API로 받을수있지만 Java는 Implementation으로만 가능

gradle에서 API 와 Implementation 차이

다양한 라이브러리 종속을 하는 build script에서 사용하는 API 와 Implementation

참고자료: https://jongmin92.github.io/2019/05/09/Gradle/gradle-api-vs-implementation/

0개의 댓글