반응형
Jake Seo
제이크서 위키 블로그
Jake Seo
전체 방문자
오늘
어제
  • 분류 전체보기 (715)
    • 일상, 일기 (0)
    • 백준 문제풀이 (1)
    • 릿코드 문제풀이 (2)
    • 알고리즘 이론 (10)
      • 기본 이론 (2)
      • 배열과 문자열 (8)
    • 데이터베이스 (15)
      • Planet Scale (1)
      • MSSQL (9)
      • 디비 기본 개념 (1)
      • SQLite 직접 만들어보기 (4)
    • 보안 (7)
    • 설계 (1)
    • 네트워크 (17)
      • HTTP (9)
      • OSI Layers (5)
    • 회고 (31)
      • 연간 회고 (2)
      • 주간 회고 (29)
    • 인프라 (52)
      • 도커 (12)
      • AWS (9)
      • 용어 (21)
      • 웹 성능 (1)
      • 대규모 서비스를 지탱하는 기술 (9)
    • 깃 (7)
    • 빌드 도구 (7)
      • 메이븐 (6)
      • 그레이들 (0)
    • Java (135)
      • 이펙티브 자바 (73)
      • 자바 API (4)
      • 자바 잡지식 (30)
      • 자바 디자인 패턴 (21)
      • 톰캣 (Tomcat) (7)
    • 프레임워크 (64)
      • next.js (14)
      • 스프링 프레임워크 (28)
      • 토비의 스프링 (6)
      • 스프링 부트 (3)
      • JPA (Java Persistence API) (5)
      • Nest.js (8)
    • 프론트엔드 (48)
      • 다크모드 (1)
      • 노드 패키지 관리 매니저 (3)
      • CSS (19)
      • Web API (11)
      • tailwind-css (1)
      • React (5)
      • React 새 공식문서 요약 (1)
      • HTML (Markup Language) (5)
    • 자바스크립트 (108)
      • 모던 자바스크립트 (31)
      • 개념 (31)
      • 정규표현식 (5)
      • 코드 스니펫 (1)
      • 라이브러리 (6)
      • 인터뷰 (24)
      • 웹개발자를 위한 자바스크립트의 모든 것 (6)
      • 팁 (2)
    • Typescript (49)
    • 리눅스와 유닉스 (10)
    • Computer Science (1)
      • Compiler (1)
    • IDE (3)
      • VSCODE (1)
      • IntelliJ (2)
    • 세미나 & 컨퍼런스 (1)
    • 용어 (개발용어) (16)
      • 함수형 프로그래밍 용어들 (1)
    • ORM (2)
      • Prisma (2)
    • NODEJS (2)
    • cypress (1)
    • 리액트 네이티브 (React Native) (31)
    • 러스트 (Rust) (15)
    • 코틀린 (Kotlin) (4)
      • 자바에서 코틀린으로 (4)
    • 정규표현식 (3)
    • 구글 애널리틱스 (GA) (1)
    • SEO (2)
    • UML (2)
    • 맛탐험 (2)
    • 리팩토링 (1)
    • 서평 (2)
    • 소프트웨어 공학 (18)
      • 테스팅 (16)
      • 개발 프로세스 (1)
    • 교육학 (1)
    • 삶의 지혜, 통찰 (1)
    • Chat GPT (2)
    • 쉘스크립트 (1)
    • 컴파일 (2)
    • Dart (12)
    • 코드팩토리의 플러터 프로그래밍 (4)
    • 플러터 (17)
    • 안드로이드 스튜디오 (1)
    • 윈도우즈 (1)
    • 잡다한 백엔드 지식 (1)
    • 디자인 패턴 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 싱글톤 패턴
  • 이펙티브 자바
  • try-with-resources
  • 메이븐 페이즈
  • 느린 쿼리
  • 참조 해제
  • NEXT JS
  • item7
  • 싱글턴
  • Java
  • 도커공식문서
  • Javadoc 자바독 자바주석 주석 Comment
  • 이펙티브 자바 item9
  • item8
  • item9
  • pnpm
  • 프로그래머의 뇌
  • 자바스크립트
  • 작업기억공간
  • 자료구조
  • 객체복사
  • 토비의 스프링
  • serverless computing
  • 슬로우 쿼리
  • 플라이웨이트패턴
  • 외래키 제약조건
  • 스프링 검증
  • Pre-rendering
  • rust
  • 싱글톤
  • 자바스크립트 인터뷰
  • MSSQL
  • 자바
  • 알고리즘
  • 자바 검증
  • 서버리스 컴퓨팅
  • 자바 디자인패턴
  • Next.js
  • 이펙티브자바
  • 메이븐 골
  • 빈 검증
  • 팩터리 메서드 패턴
  • next js app
  • prerendering
  • 디자인패턴
  • 추상 팩터리 패턴
  • 자바스크립트 면접
  • 메이븐 라이프사이클
  • 러스트
  • bean Validation

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Jake Seo

제이크서 위키 블로그

메이븐 유저가 꼭 알아야 할 메이븐의 골(Goal)과 페이즈(Phase)란 무엇일까?
빌드 도구/메이븐

메이븐 유저가 꼭 알아야 할 메이븐의 골(Goal)과 페이즈(Phase)란 무엇일까?

2022. 6. 1. 10:14

메이븐 빌드 라이프사이클 (Maven Build Lifecycle)

메이븐 라이프사이클은 빌드와 배포 중에 일어나는 작업들을 정의한 것이다. 빌트인으로 제공하는 것으로는 default, clean, site 가 있다. 메이븐 빌드는 타겟 프로젝트의 배포를 위해 특정한 라이프사이클을 따른다. 빌드인 라이프사이클로는 아래의 항목이 있다.

  • default: 메인 라이프사이클로 배포에 대한 책임이 있다.
  • clean: 이전 빌드에서 생성된 모든 파일을 지워서 프로젝트를 깔끔하게 만들어준다.
  • site: 프로젝트의 사이트 문서를 만들어준다.

각각의 라이프사이클은 연속된 여러 개의 페이즈로 이루어져있다. 예를들어 default 빌드 라이프사이클은 23개의 페이즈를 포함한다. clean 은 3개, site는 4개를 포함한다.

메이븐 페이즈 (Maven Phase)

메이븐 페이즈는 메이븐 빌드 라이프사이클에서의 각 단계를 나타낸다. 각 페이즈는 특정한 태스크에 대한 책임을 진다.

default 빌드 라이프사이클에서 가장 중요한 페이즈는 아래와 같다.

  • validate: 빌드를 위해 필요한 모든 정보가 이용 가능한지 확인한다.
  • compile: 소스코드를 컴파일한다.
  • test-compile: 테스트 소스코드를 컴파일한다.
  • test: 유닛 테스트를 수행한다.
  • package: 컴파일된 소스코드를 배포 가능한 포맷으로 패키징한다. (jar, war 등)
  • integration-test: 통합 테스트를 실행할 필요가 있을 때, 패키지를 진행하고 배포한다.
  • install: 로컬 리포지토리에 패키지를 설치한다.
  • deploy: 원격 리포지토리에 패키지를 복사한다. 다른 개발자와 해당 프로젝트를 공유하고 싶을 때 사용한다.

메이븐 공식문서 라이프사이클

mvn <PHASE>

위 명령어를 실행하면, 단 하나의 페이즈만 실행하는 것이 아니고 필요한 모든 선행 페이즈도 함께 실행된다.

mvn deploy

이를테면, deploy 페이즈를 실행하는 경우에 deploy 이전에 필요한 모든 페이즈가 다 실행되는 것이다. 그래서 사실상 위에 언급한 default 라이프사이클을 모두 실행하는 것과 별반 다를 것이 없다.

메이븐 골 (Goal)

각 페이즈는 연속된 골로 이루어져 있다. 각 골은 하나의 세부적인 작업을 책임진다.

페이즈를 실행할 때, 이 페이즈에 종속된 모든 골은 순서대로 수행된다. 아래는 몇개의 페이즈와 종속되는 골의 예제이다.

  • compiler:compile: compiler 플러그인에서 나온 compile 골은 compile 페이즈에 종속되어 있다.
  • compiler:testCompile: 이는 test-compile 페이즈에 종속되어 있다.
  • surefire:test: 이는 test 페이즈에 종속되어 있다.
  • install:install: 이는 install 페이즈에 종속되어 있다.
  • jar:jar, war:war: 이는 package 페이즈에 종속되어 있다.

메이븐 플러그인 (Plugin)

메이븐 플러그인이란, 골 을 모아놓은 것을 말한다. 하지만 플러그인 내부에 있는 골 은 모두 같은 페이즈에 종속될 필요가 없다.

이를테면, 아래는 Failsafe 플러그인의 예시이다. 통합 테스트를 책임진다.

<build>
    <plugins>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${maven.failsafe.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Filesafe 플러그인이 2개의 메인 골로 이루어진 것을 확인할 수 있다.

  • integration-test: 통합 테스트를 실행한다.
  • verify: 모든 통합 테스트가 통과했는지 확인한다.

아래의 명령어를 이용하여 특정 플러그인에 속한 모든 골을 확인할 수 있다.

# mvn <PLUGIN>:help
mvn failsafe:help

출력 값은 아래와 같이 나올 것이다.

This plugin has 3 goals:

failsafe:help
  Display help information on maven-failsafe-plugin.
  Call mvn failsafe:help -Ddetail=true -Dgoal=<goal-name> to display parameter
  details.

failsafe:integration-test
  Run integration tests using Surefire.

failsafe:verify
  Verify integration tests ran using Surefire.

전체 페이즈를 실행하지 않고 특정 골을 실행하고 싶다면, 아래와 같은 명령어를 이용할 수 있다.

# mvn <PLUGIN>:<GOAL>
mvn failsafe:integration-test

특정 페이즈 (Phase) 에 종속된 모든 골 (Goal) 살펴보기

아래 명령어를 통해 확인할 수 있다.

mvn help:describe -Dcmd=PHASENAME

위 명령어를 사용하기 위해서는 아래의 의존성을 설치해주어야 한다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-help-plugin</artifactId>
    <version>3.2.0</version>
</plugin>

사실 따로 설치 안해도 메이븐 명령어가 수행되면 자동으로 설치된다.

Intellij 도구를 이용해 손쉽게 mvn 명령어 사용하기

Lifecycle 이나 Plugins 내부에 위치한 Phase 를 우클릭하여 Modify Run Configuration... 을 클릭한 뒤에 ...

위와 같이 Run 항목에 있는 명령어를 수정하면 된다.

위의 Run Configuration 에 있는 명령들은 직접 커스텀한 mvn 명령들이다. 저런식으로 저장해놓고 편리하게 mvn 명령어를 사용할 수 있다.

결과 확인하기

help:describe -Dcmd=clean -f pom.xml

clean 페이즈가 어떻게 이루어지는지 확인해보는 명령어이다.

[INFO] 'clean' is a phase within the 'clean' lifecycle, which has the following phases: 
* pre-clean: Not defined
* clean: org.apache.maven.plugins:maven-clean-plugin:2.5:clean
* post-clean: Not defined

명령 수행 결과로 clean 페이즈가 clean 라이프사이클 안에 있으며 아래의 페이즈를 포함하고 있음을 확인할 수 있다. 위의 정보는 단순히 플러그인 골이라는 것을 알려준다.

[INFO] 'org.apache.maven.plugins:maven-compiler-plugin:3.1:compile' is a plugin goal (aka mojo).
Mojo: 'compiler:compile'
compiler:compile
  Description: Compiles application sources
  Implementation: org.apache.maven.plugin.compiler.CompilerMojo
  Language: java
  Bound to phase: compile

  Available parameters:

    annotationProcessors
      Names of annotation processors to run. Only applies to JDK 1.6+ If not
      set, the default annotation processors discovery process applies.

    compilerArgs
      Sets the arguments to be passed to the compiler if fork is set to true.
      Example:

      <compilerArgs>
       <arg>-Xmaxerrs=1000</arg>
       <arg>-Xlint</arg>
      </compilerArgs>

레퍼런스

baeldung.com
메이븐 라이프사이클 설명 공식문서

반응형
저작자표시 비영리 (새창열림)

'빌드 도구 > 메이븐' 카테고리의 다른 글

메이븐의 .lastupdated 확장자 파일이란?  (0) 2023.03.03
메이븐 인코딩 에러 해결하기  (0) 2022.06.08
로컬 파일 메이븐 의존성 추가하기  (0) 2022.06.08
intellij mvnw 파일이 없을 때 메이븐 경로 잡기  (0) 2022.06.08
메이븐이란? (What is Maven)  (0) 2022.06.01
    '빌드 도구/메이븐' 카테고리의 다른 글
    • 메이븐 인코딩 에러 해결하기
    • 로컬 파일 메이븐 의존성 추가하기
    • intellij mvnw 파일이 없을 때 메이븐 경로 잡기
    • 메이븐이란? (What is Maven)
    Jake Seo
    Jake Seo
    ✔ 잘 보셨다면 광고 한번 클릭해주시면 큰 힘이 됩니다. ✔ 댓글로 틀린 부분을 지적해주시면 기분 나빠하지 않고 수정합니다. ✔ 많은 퇴고를 거친 글이 좋은 글이 된다고 생각합니다. ✔ 간결하고 명료하게 사람들을 이해 시키는 것을 목표로 합니다.

    티스토리툴바