일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 정올
- vue
- 김씨만행복한세상
- 태그를 입력해 주세요.
- 1108
- Floyd
- 암스트롱 수
- hexagonal architecture #layer architecture #아키텍쳐 #헥사고날
- maven #메이븐 #빌드 #build #lifecycle
- 오류교정
- 2613
- JAVA #필수값
- 코드그라운드
- 새로운방
- 1045
- 1037
- 페이지전환
- kafka connect #debizium #transform
- Floyd 알고리즘
- Queue
- 알고리즘
- 토마토(고)
- 큐
- kafka #consumer #autoStartup
- kafka #ackmode #manual #acknowledge
- sql #오라클 #oracle #sequence #foreach #insert #mybatis
- 새로운 방
- 최단거리
- 페이지 전환
- 스택
- Today
- Total
별집사의 IT세상
메이븐(Maven)에 대해 알아보자 본문
개요
Maven은 Java 프로젝트의 빌드, 관리 및 배포를 자동화하는 도구이다. 요즘 많이 사용 되는 두 빌드 관리 도구(Maven, Gradle) 중 하나이고, 평소의 프로젝트에서 많이 사용하고 있지만, 직접 구성해본적이 없어 자세히 알지 못하였고, 새로 토이프로젝트를 진행하면서 좀 더 깊게 알아야 할 필요성을 느껴 Maven의 정의 및 장단점 등을 정리해보려 한다.
정의
Maven은 아파치에서 개발한 Java 기반의 라이프사이클 관리를 위한 빌드 도구이다. 빌드, 패키지 배포 등을 제공하고, 라이브러리 관리 기능도 가지고 있다.
pom.xml 파일에서 라이브러리를 관리하며, 이를 통해 오픈소스 라이브러리 등을 편하게 관리할 수 있어, 개발 및 유지보수에 용의하다.
주요 특징
- 프로젝트 관리
- 프로젝트의 빌드, 테스트, 패키지, 배포 등 전체 라이프사이클을 관리한다.
- 의존성 관리
- 중앙저장소를 통해 프로젝트에 필요한 라이브러리와 플러그인을 자동으로 관리한다.
- 의존성 충돌을 해결하고 버전관리를 용이하게 한다.
- 빌드 자동화
- 컴파일, 테스트, 패키지, 배포 등을 자동화 할 수 있다.
- 일관된 빌드 프로세스를 제공하여 개발 생산성을 향상시킨다.
- 플러그인 기반의 아키텍쳐
- 다양한 플러그인으로 기능을 확장할 수 있다.
- 다양한 언어 프로젝트에서 사용 가능하다.(C#, Ruby, Scala..)
- CI/CD 지원
- Jenkins, CircleCI 등과 쉽게 통합된다.
라이프사이클(Lifecycle)
이 포스트를 작성한 주 된 이유이다. Lifecycle이란, 미리 정해진 빌드 순서로 동작하는 것을 뜻한다.
clean | 이전 빌드에서 생성되었던 파일들을 삭제 |
validate | 프로젝트의 정보를 사용할 수 있는지를 확인하는 유효성 검증단계 |
compile | 프로젝트 코드를 컴파일하는 단계 |
test | 단위테스트를 수행하는 단계 |
package | 컴파일 된 코드와 리소스를 jar, war 등의 파일로, 배포를 위한 패키지로 만드는 단계 |
verify | 패키지 유효성 검사 및 품질 기준 만족을 체크하는 단계 |
install | 패키지를 로컬 repository에 설치하는 단계 |
site | 프로젝트 사이트를 생성하는 단계 |
deploy | 최종 패키지를 원격 repository에 복사하는 단계(다른 개발자 및 프로젝트와 공유) |
maven에는 세가지 주요 Lifecycle이 있다. 위 항목 중 볼드처리된 항목(clean,site)를 제외한 항목들은 default lifecycle에 포함되어있다. 자세한 Lifecycle정보는 다음 사이트에서 제공한다.(https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference)
- default lifecycle
- clean lifecycle
- site lifecycle
Phase
Lifecycle은 여러 단계(phase)로 이루어져 있고, 각 단계는 순차적으로 실행된다. 만약 특정 단계를 실행하면, 그 이전 단계도 모두 순서대로 실행되는 방식이다. 예를 들어 mvn package를 실행한다면, package이전에 validate, compile, test단계가 순서대로 실행되고 마지막으로 package까지 실행되는 방식이다.
Goal
Goal은 Maven 프로젝트에서 특정한 태스크나 작업을 수행하는 가장 작은 실행 단위이다. 각 goal은 프로젝트 빌드나 관리와 관련된 특정 작업을 담당한다.
- 모든 goal은 특정 플러그인에 속한다.
- goal은 lifecyle단계와 독립적으로 실행될 수 있다. ex) mvn compiler:compile > 컴파일만 수행, mvn compile > compile 이전 단계까지 모두 실행
- goal은 동작을 커스터마이즈 할 수 있는 파라미터들을 가질 수 있다.
mvn compiler:compile -Dmaven.compiler.source=1.8 -Dmaven.compiler.target=1.8
- goal은 하나 이상의 lifecycle에 바인딩 될 수 있다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>id1</id>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>id2</id>
<phase>process-resources</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
결론
단순하게 사용하기보다, 개념을 익히고 사용하면, 특정 상황에 좀 더 대처하기 쉬울 것 같다. 또한 goal을 잘 이용한다면, 상황에 따라 적절하게 빌드를 할 수 있을 것 같다.
'IT > IT 정보' 카테고리의 다른 글
Vue 즉시실행함수표현 (0) | 2024.11.08 |
---|---|
알고리즘 기법 (0) | 2017.04.15 |
Floyd 알고리즘 (0) | 2017.04.15 |
큐와 스택 (0) | 2017.04.13 |