기록하는 습관

[Spring] Gradle (2) - ant, maven, gradle 본문

개발/Spring

[Spring] Gradle (2) - ant, maven, gradle

로그뉴 2022. 7. 12. 16:15

ant

  • 특징
    • XML 기반 빌드 스크립트 개발
    • 규칙이 없음
    • 절차적이다.
    • 생명주기를 갖지 않아 각각의 Target에 대한 의존관계와 작업을 정의해 주어야 함.
  • 단점
    • 스크립트의 재사용이 어렵다.

 

maven

  • 특징
    • 모든 Dependency를 리스트의 형태로 Maven에게 알려서 종속성을 관리한다.
    • XML, Repository를 가져올 수 있다. → Jar, Class Path를 선언만 하면 직접 다운로드 할 필요가 없이 Repository에서 자동으로 필요한 라이브러리 파일을 불러와 준다.
  • 단점
    • 라이브러리가 서로 종속할 경우 XML이 복잡해진다.
  • 라이프 사이클(빌드 순서)
    • Clean : 이전 빌드에서 생성된 파일들을 삭제하는 단계
    • Validate : 프로젝트가 올바른지 확인학고 필요한 모든 정보를 사용할 수 있는 지 확인하는 단계
    • Compile : 프로젝트의 소스코드를 컴파일하는 단계
    • Test : 유닛(단위) 테스트를 수행하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)
    • Package : 실제 컴파일된 소스 코드와 리소스들을 jar등의 배포를 위한 패키지로 만드는 단계
    • Verify : 통합테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
    • Install : 패키지를 로컬 저장소에 설치하는 단계
    • Site : 프로젝트 문서를 생성하는 단계
    • Deploy : 만들어진 Package를 원격 저장소에 release하는 단계
  • 메이븐에서는 하나의 플러그인에서 여러작업을 수행할 수 있도록 지원하며, 플러그인에서 실행할 수 있는 각각의 기능을 goal이라고 한다. 플러그인의 goal을 실행하는 방법은 다음과 같다.
    • -mvn groupId:artifactId:version:goal(아래와 같이 생략가능)
    • -mvn plugin:goal
  • 참고: 메이븐 버전 충돌 해결
    • project 내 dependency를 tree format으로 보여준다.
    • 명령어 사용: mvn dependency:tree

 

gradle

  • 특징
    • JVM 기반의 오픈소스 빌드 자동화 툴.
    • Ant, Maven의 단점을 보완
  • 장점
    • 프로젝트 시작시 설정에 드는 시간을 절약할 수 있다.
  • maven 보다 좋은 점
      • Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.
        • 설정 내용이 길어지고 가독성 떨어짐
        • 의존관계가 복잡한 프로젝트 설정하기에는 부적절
        • 상속구조를 이용한 멀티 모듈 구현
        • 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야함 (상속의 단점 생김)
      • Gradle은 그루비를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
        • Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다.
        • 설정 주입시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
      • maven보다 최대 100배 빠르다.
  • Java plugin (apply plugin: 'java')
    • 소스세트
    • 속성
    • 태스크
    • 규칙
  • 빌드 순서
    • 초기화: 빌드 환경설정, 참여할 프로젝트 결정
    • 구성: 빌드 Task 그래프를 구성, 태스크 순서 결정
    • 실행: 구성 단계가 끝날 때 선택한 태스크 실행
  • Task
    • build가 수행하는 일부 원자적 작업
    • gradle은 명령어에 의해 task를 수행하는 프로그램이다.
    • task는 사용자가 정의할 수 있음.
    • build.gradle에 task를 기술해두면 그것을 gradle 명령으로 호출시켜 실행 가능.
  • Custom Task Type
    • 이미 존재하는 task로 처리할 수 없는 빌드 작업이 필요한 경우 custom task 제작 가능.
    • buildSrc, Package Plugin에 배치하는 것이 좋음.
  • build.gradle 파일 구조와 분석
    • repositories
      • gradle이 필요한 라이브러리를 자동으로 다운로드 하기 위해 사용하는 저장소
      • jcenter(), mavenCentral()은 gradle의 메소드이다.
    • dependencies
      • 저장소에서 필요한 라이브러리를 사용하기 위한 문장
  • out 폴더: 인텔리제이 빌드시에 컴파일한 class를 저장하는 폴더
  • build 폴더: gradle 빌드시에 컴파일한 class를 저장하는 폴더
  • 기본 task: https://wani-coding.tistory.com/131
Comments