[Java] maven, gradle

Soondol·2024년 8월 11일

간단 정리 및 추가 정보

  • 빌드 관리 도구를 사용하는 이유
    빌드 관리 도구는 빌드, 테스트, 배포 과정의 자동화를 통해 개발 효율성을 높임. 의존성 관리, 빌드 스크립트 작성, 테스트 통합 등 다양한 기능을 제공하여 개발자의 반복 작업을 줄이고, 프로젝트의 일관성을 유지.
  • Maven과 Gradle의 주요 차이점
    Maven: XML 기반의 pom.xml 파일을 사용하여 명시적이고 구조화된 설정을 제공하며, 정해진 빌드 라이프사이클을 가지고 있음
    Gradle: Groovy 또는 Kotlin DSL을 사용하여 더 유연한 빌드 스크립트를 제공하고, 성능 향상을 위한 캐싱 및 병렬 처리 기능을 갖추고 있음
  • Maven의 라이프사이클
    기본적으로 clean, bulid, site의 세 가지로 나뉘며, 각 라이프사이클은 여러 단계로 구성.
    build 라이프사이클은 validate, compile, test, package, verify, install, deploy 단계로 이루어짐
    각 단계는 특정 작업을 수행하며, 이를 통해 프로젝트의 빌드 및 배포가 이루어짐.
  • Maven의 pom.xml 파일의 주요 요소
    pom.xml 파일에는 프로젝트의 의존성(dependencies), 플러그인(plugins), 빌드 프로파일(profiles), 그리고 프로젝트 메타데이터(groupId, artifactId, version) 등이 포함
  • Gradle의 build.gradle 파일에서 의존성을 어떻게 관리함?
    build.gradle 파일의 dependencies 블록에서 의존성을 정의. ex) implementation 'com.example:library:1.0'과 같은 형식으로 외부 라이브러리를 추가. 또한, 의존성 버전 충돌 해결을 위해 resolutionStrategy를 사용할 수 있음

빌드 관리 도구 (Build Tool)

  • MavenGradle은 Java 프로젝트의 빌드 및 의존성 관리를 위한 도구

Build

  • 빌드는 소스 코드에서 실행 가능한 프로그램으로의 변환 과정을 포함하며, 컴파일, 실행, 패키징, 배포 등의 단계로 이루어져 있음
    • 컴파일: 소스 코드(예: Java, C++)를 기계어 또는 중간 언어(예: 바이트코드)로 변환
    • 링크: 여러 개의 오브젝트 파일을 하나의 실행 파일이나 라이브러리로 결합
    • 패키징: 독립 실행형 프로그램이나 라이브러리 형태로 묶음, ex) Java의 경우 JAR 파일로 패키징
    • 테스트: 빌드가 제대로 이루어졌는지 확인하기 위해 자동화된 테스트를 실행
    • 배포: 빌드된 결과물을 서버나 클라우드 등으로 배포하는 과정

Bulid Management Tools

  • 빌드 과정을 자동화하고 관리하는 도구. 소스 코드의 컴파일, 테스트, 패키징, 배포를 자동으로 수행하여 개발 효율성을 높임
  • 가장 널리 사용되는 빌드관리도구로 Maven, Gradle이 있음

Maven

  • 설정 파일: Maven은 XML 기반의 pom.xml 파일을 사용하여 프로젝트를 설정. 이 파일에는 프로젝트의 의존성, 빌드 플러그인, 빌드 프로파일 등이 정의.

  • 라이프사이클: Maven은 validate, compile, test, package, verify, install, deploy와 같은 명확히 정의된 빌드 단계가 있음. 각 단계는 특정 작업을 수행합니다.

  • 의존성 관리: Maven은 중앙 저장소(Maven Central)에서 라이브러리 의존성을 관리하고, dependency 태그를 통해 외부 라이브러리를 쉽게 추가할 수 있음.

  • 플러그인: Maven은 다양한 플러그인을 통해 기능을 확장할 수 있음. 플러그인은 빌드 프로세스의 특정 작업을 수행하는 데 사용.

Gradle

  • 설정 파일: Gradle은 Groovy 또는 Kotlin DSL을 사용하여 빌드 스크립트를 작성. build.gradle (Groovy) 또는 build.gradle.kts (Kotlin) 파일을 사용.

  • 성능: Gradle은 캐시와 병렬 처리 기능을 통해 빠른 빌드 속도를 가짐. Gradle Daemon은 빌드 성능을 높이는 데 도움.

  • 의존성 관리: Gradle은 Maven 저장소를 사용할 수 있음, dependencies 블록을 통해 의존성을 정의하고 관리할 수 있음.

  • 확장성: Gradle은 사용자 정의 플러그인 및 태스크를 지원, 복잡한 빌드 로직을 코드처럼 작성할 수 있음.

기타 빌드 도구

  • Ant: 초기 Java 빌드 도구로, XML 기반의 build.xml 파일을 사용. Ant는 빌드 과정을 세밀하게 제어할 수 있지만, 빌드 스크립트가 복잡해질 수 있음.

  • Buck: Facebook에서 개발한 빌드 시스템으로, 빠른 증분 빌드를 지원. 특히 큰 프로젝트에 유용.

  • SBT: Scala 빌드 도구로, Scala 및 Java 프로젝트에 적합하며, 유연한 빌드 설정과 빠른 빌드를 지원.

0개의 댓글