프로그래밍/Spring

[Spring] Maven Lifecycle에 대해 알아보자

byungmin 2020. 9. 2. 20:37

Youtube 뉴렉처 강사님의 메이븐 강의를 듣고 정리한 글입니다.


#1. Maven Lifecycle

앞서 우리는 cmd에서 컴파일을 할 때, 패키지를 만들 때 그에 해당하는 명령어를 사용했다.

(mvn compile, mvn package...등) 이 명령어는 Maven이 가지고 있는 빌드 단계에 해당되는 명령어 들이다.

 

1. 특징

- Maven에서는 미리 정의하고 있는 빌드 순서가 있다. 이 순서를 라이프 사이클(LifeCycle)이라고 한다.

- 라이프 사이클의 각 빌드 단계를 phase라 하며 각각의 phase는 의존관계를 가지고 있어 해당 phase가 수행되려면 이전 단계의 phase가 모두 수행되어야 한다.

 

- 만약 compile이 실행되려면 그 전 단계들이 실행되어야 한다는 뜻이다.

 

- 모든 단계는 정적으로 다 실행되는 것은 아니다.

각 단계는 각각 플러그인 형태로 되어있어서 모든 단계들을 빼거나 추가할 수 있다.

또한 각 단계마다 실행할수 있는 플러그인을 교체하거나 버전을 교체할 수 있다.

 

어디서? POM.xml에서 설정가능 하다.

POM.xml (Project Object Model) 프로젝트가 가지고 있는 모델을 구성하는 파일이다.

 

- 플러그인이 가지고 있는 기능을 goal이라고 한다.

 

2. cmd를 통해 각 단계를 확인하는 방법

mvn help:describe -Dcmd=compile 명령어 실행

각각의 단계에 설정되어있는 플러그인들을 확인할 수 있다. Maven이 기본적으로 제공하는 플러그인이 있으며, 우리가 원하면 플러그인을 뺄수도, 변경할수도 있다.

 

3. IDE를 통해 각 단계를 확인하는 방법

기존에 cmd창에서 명령어를 입력하고 컴파일하고 출력하는 것은 너무 재미없다.

 

Maven은 IDE와 함께 있을 때 그 힘이 커진다.

- IntelliJ를 통해 Maven프로젝트를 실행시켰다.

라이프 싸이클과 설치된 플러그인을 확인할 수 있다.

4. Plugin의 속성을 확인하는 방법

https://maven.apache.org/plugins/index.html

 

Maven – Available Plugins

Available Plugins Maven is - at its heart - a plugin execution framework; all work is done by plugins. Looking for a specific goal to execute? This page lists the core plugins and others. There are the build and the reporting plugins: Build plugins will be

maven.apache.org

메이븐 홈페이지 - Maven Plugins 메뉴를 눌러보면 각 플러그인의 버전과 기능(goal)들을 확인할 수 있다.

 

컴파일을 담당하고 있는 plugin

컴파일 플러그인을 눌러보면 Goal을 확인해볼 수 있다.

compile 플러그인은 2개의 goal을 가지고 있다. compile, testCompile

 

goal이 실질적인 플러그인 역할을 하게 된다.

 

5. Plugin의 속성을 변경하는 방법

POM.xml을 통해 변경 가능

 

컴파일러의 버전을 변경해보자.

<build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

3.6 버전이상 부터는 아래와 같이도 가능

<properties>
   <maven.compiler.source>1.8</maven.compiler.source>
   <maven.compiler.target>1.8</maven.compiler.target>
</properties>