티스토리 뷰

java

메이븐이란 무엇인가

ssffwert 2022. 1. 2. 18:59

JAVA 프로그래밍 면접 이렇게 준비한다(노엘 마크엄 지음/정원천 옮김) p.475 ~ 494 내용 정리
2021-12-28(화) 23:00 ~ 23:40

 


메이븐이란 무엇인가?
프로젝트의 자원을 모두 하나로 합치는 데 집중하는 애플리케이션인 메이븐과 앤트가 있다. 자바 프로젝트를 위해 가장 많이 사용되는 빌드 도구다.
메이븐은 프로젝트 전체를 포괄하는 빌드 도구로, 자바 프로젝트를 컴파일, 테스트, 배포하는 데 사용된다.
설정을 통해 만든 규칙을 따르도록 설계되어 있다.
대부분의 자바 애플리케이션용 빌드는 매우 비슷한 방법으로 정의될 수 있으며, 비슷한 구조로 소스 코드를 작성하면 메이븐은 필요한 자원들을 어디서 찾아야 하는지 파악해 여러 가지 빌드 작업을 수행한다.

 


메이븐에는 대부분의 프로젝트 설정이 기본으로 내장되어 있어 애플리케이션이 WAR(Web Archive)나 JAR 파일로 배포될 것이다.
메이븐은 이 작업들을 어떻게 빌드해야 하는지에 대한 정의를 갖고 있다.

메이븐의 플러그인 시스템은 빌드에 특정한 연산을 더 추가할 수 있게 해준다.
의존성 설정과 비슷하게 이 플러그인들은 원격으로 제공되며, 메이븐은 빌드할 때 이들을 찾을 수 있다.
또한 플러그인이 제공하는 연산이 무엇이든 실행할 수 있다.
일반적인 플러그인의 예는 ``maven-jetty-plugin``인데, 이는 현재 빌드를 웹 애플리케이션 형태로 실행한다.
이 플러그인은 프로젝트가 web.xml 파일을 ``src/main/webapp/WEB-INF`` 디렉터리에 두는 관습을 따른다는 가정 아래 적합한 web.xml 파일을 찾는다.
이러한 역할을 수행하는 또다른 플러그인은 ``maven-release-plugin``이며, 출시 빌드용으로 코드를 나누고 애플리케이션의 버전 번호를 변경하기 위해 서브버전이나 Git 같은 소스 버전 관리 도구와 연계해서 복잡한 작업을 수행하고, 다음 개발주기를 준비한다.


메이븐 빌드의 생명주기는 무엇인가?
메이븐 빌드는 생명주기라는 일련의 상태로 구성되며 각 상태는 특정 골에 따라 구분된다.
(골: 실행하기 위한 작업의 특정 단위)
각 상태는 이전 상태에 의존하며 어떤 이유에서든 특정 골을 통한 작업에 문제가 발생하면 전체 빌드가 실패할 수밖에 없다.
-기본상태
1. clean
2. validate -> compile -> test -> package -> install
3. deploy

어떤 빌드 결과물은 프로젝트 루트의 ``target``이라는 디렉터리에 저장된다. clean상태의 골은 이 ``target`` 디렉터리를 지워서 이전에 빌드된 파일들을 없앤다.
이는 mvn clean 같은 빌드 상태를 명시해서 초기화하거나 항상 실행되도록 POM(Project Object Model)에 정의하지 않으면 다음 상태가 되기 전에는 실행하지 않는다.

validate 상태는 메이븐의 빌드 파일용 XML 사양을 따르는 올바른 pom.xml 파일인지 확인한다.
compile 상태는 모든 정의된 의존성들을 가져오고, 코드를 컴파일하고, 모든 클래스 파일을 ``target/classes`` 디렉터리에 빌드한다.
test 상태는 디렉터리에 있는 클래스들을 컴파일하고 디렉터리에 있는 모든 단위 테스트 또는 통합 테스트용 테스트 코드를 실행한다.
package 상태는 WAR나 JAR파일 같은 결과물을 생성한다. 이 파일은 target 디렉터리의 루트에 저장된다.
install 단계는 빌드된 결과물을 내부 메이븐 저장소로 보낸다. 대개 ``$HOME/.m2/repository``디렉터리에 위치한다.

마지막 단계는 deploy 단계로, 마무리된 결과물을 배포하기 위한 장소가 어딘지 정확히 정의하는 추가 설정이 좀 더 필요하다.

 


'java' 카테고리의 다른 글

싱글톤패턴  (0) 2022.04.26
메모리는 어떻게 할당하는가  (0) 2022.01.02
자바 키/값 확인 출력 코드  (0) 2021.02.08
알파벳을 5 칸을 밀어서 출력하기  (0) 2017.02.16
ArrayList 를 이용하여 삽입정렬하기  (2) 2017.02.03
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday