BACK/SPRING

[Spring] Maven 이란? (+POM)

연듀 2021. 10. 16. 13:48

 

큰 규모의 소프트웨어의 경우 많은 프로젝트, 모듈로 구성되어 있다.

수동적으로 빌드하는 것은 많은 시간을 요구된다.

효율적인 빌드 도구가 필요하다. -> maven의 등장

 

 

 

 

Maven을 사용할때의 장점

 

-자동적인 build tool

빌드라는 작업은 몇 개의 단계로 이루어져 있다. 이러한 작업을 자동적으로 수행해준다.

 

-Dependency Management tool

A 라이브러리를 사용하려고 했는데, A 라이브러리는 BC를 참조한다. 그리고 CD를 의존한다.

A만 포함하면 B,C,D를 받아올 수 있다.

이러한 의존성 관리가 용이하다.

 

-Maven repository

모든 라이브러리를 관리하는 중앙 집중 저장소.

필요에 따라서 웹 사이트까지 만들어줄 수 있게 한다.

 

 

 

 

 

 

Pom.xml은 메이븐 설정 파일이다.

메이븐이 pom.xml파싱한다.

Remote repository 에 접속을 시도해서 pom.xml에 지정된 라이브러리 혹은 플러그인(artifact)들을 받아온다

그리고 local repository에 저장해 사용한다. 

 

 

 

 

Maven은 실제로 빌드할 때 phase(단계)를 가진다.

플러그인에는 각종 goal(task)이 있다.

 

 

 

 

POM

 

 

POM은 project object model의 약자로,  프로젝트에 대한 완전한 설명을 담고 있는 설정 파일이다.

POM Relationships안을 보면 coordinate이란게 있다. 전세계적으로 유일한 식별자인 좌표이다.

프로젝트의 coordinate은 groupId, artifactId, version 이 세가지로 이루어져 있다.

예 ) groupId-삼성전자, artifactId-갤럭시, version:10 

 

Multi-module: 다양한 모듈

 

Inheritance: 계층 구조 (부모 폼, 자식 폼)

장점은 재사용성

부모에서 설정한 값을 자식이 그대로 활용이 가능하다.

 

Dependencies : 안에 각각의 dependency들이 있다. 

부모로부터 상속받기 때문에 build setting을 일일이 명시해 주지 않아도 된다. 설정이 자동으로 이루어진다.

 

 

 

Super POM

 

모든 pom.xml은 함축적으로 Super POM 으로부터 상속을 받는다.

 

=>설정할 양이 줄어든다.

특별히 명시를 해주지 않아도 된다.

 

Effective POM : maven 가진 기본설정과 사용자가 지정한 설정을 가진 pom.xml 파일의 내용을 합한 파일.

Super POM으로부터 상속받은 것까지 다 담겨져 있다.

 

 

Source code is assumed to be in ${basedir}/src/main/java

Resources are assumed to be in ${basedir}/src/main/resources

Tests are assumed to be in ${basedir}/src/test

A project is assumed to produce a JAR file

compile byte code to ${basedir}/target/classes and then create a distributable JAR file in ${basedir}/target

 

 

 

 

 

 

Maven Build Lifecycle

 

Clean, Default, Site

세개의 라이프 사이클이 존재한다. 각각의 라이프사이클은 phase로 이루어진다.

 

 

 

 

기본, clean 라이프사이클을 많이 사용한다. (clean -> 기본)

 

Default/build lifecycle : 빌드 결과물 생성

기본 라이프사이클에서 컴파일, 테스트 이후 패키징할 때 artifact 라는 산출물이 만들어진다.

Install하면 artifact가 로컬 저장소에 install된다. 그 후 원격 저장소에 deploy 된다.

 

이렇게 라이프 사이클은 순서가 있는 단계이다. 순차적으로 이루어진다.

 

 

Clean lifecycle : 빌드된 결과물 제거

Site lifecycle : Java document 결과물 생성. 사이트를 만들어서 서버에 배포

 

 

 

Phase에는 plugin + 실제 goal(작업)이 있다. 

Phase가 실제 수행하는 일은 plugin이고,  그 안에 Goal이 있음

플러그인은 하나 이상의 goal 집합체이다. 플러그인은 세가지 좌표에 의해 고유하게 식별이 된다.(groupid, artifactid, version)

Goal은 특정 일이다

플러그인은 <configuration> 이라는 파라미터를 통해서 설정을 바꿔줄 수 있다.

Super POM 의해 상속받은 값이 있는데, configuration을 통해 오버라이딩 하는 것이다.

 

각각의 phase에는 해당 phase에 관련된 goal이 수행이 되게 된다.

 

$ mvn <phase>

명시한 phase까지 모두 순차적으로 수행이 된다.

예를 들어 maven deploy 을 했을 때, deploy 만 수행되는게 아니라 그 앞에 단계들도 모두 수행되고 그 다음에 deploy가 수행된다.

 

$ mvn <plugin:goal>

명시한 Plugingoal만 수행된다