Skip to content

Maven #
Find similar titles

Structured data

Category
Programming

메이븐(Apache Maven)은 개발자로 하여금 자바용 프로젝트 관리를 쉽게 도와주는 빌드 툴이다.

메이븐 이전에는 동일한 아파치 그룹에서 앤트(Ant) 범용 빌드 스크립트를 2000년에 출시하여 지금까지도 프로젝트 빌드 툴의 대표 자리를 차지하고 있으나, 사람이 사용하는 모든 도구들이 그러하듯 앤트(Ant) 역시 몇 가지 불편함이 있는데 사용자가 직접 소스코드 위치와 빌드 된 파일들의 위치, 작업의 순서를 설정해야 하고 의존성 관리도 직접 해야 하기 때문에 프로젝트의 단위가 커지면서 빌드와 테스트의 소요 시간이 길어지는 문제가 발생하고 앤트(Ant) 설정과 유지를 위한 비용이 되려 증가하면서 빌드 설정의 간속화와 의존성 관리 지원을 받을 수 있게 하도록 메이븐(Maven)이란 프로젝트 빌드 툴이 2004년 아파치 그룹에 의해 발표되었다.

메이븐과 앤트의 가장 큰 차이점이라면 COC(Convention Over Configuration)의 개념을 도입해 설정보다는 관례를 따르기 때문에 소스와 산출물의 위치가 어느정도 정해져 있으며 가장 큰 이점으로 보는 것은 메이븐 레포지토리를 통해 라이브러리 의존성을 알아서 검증과 설치를 해결해 주기 때문에 인터넷만 보장된다면 프로젝트 통합 빌드로부터 해방될 수 있다. 그렇다고 메이븐이 앤트보다 무조건 좋다고만 할 수 없는 것이 복잡한 아키텍처에서의 빌드를 위해선 설정에 대한 자유도가 보장되는 것이 도움 되기 때문에 상황에 따른 도구 선택이 현명해 보인다.

메이븐 역시 성능이나 자유도 부족이란 단점을 내재하고 있어서 앤트와 메이븐의 장점만을 추린 Gradle 이란 빌드 시스템이 2007년 발표되기도 하였다. 프로젝트 빌드 비용을 줄이기 위해 빌드 도구들이 개발되었지만, 지속적인 버전업과 새로운 도구들의 출현으로 프로젝트 마다 빌드 도구들에 대한 학습 비용이 증가되는 모순 된 상황이 발생하고 있기는 하지만 한 번 익숙해지게 되면 다른 도구로의 확장이 그리 어렵지만은 않을 것으로 사료된다.

메이븐(Maven) 프로젝트 생성 #

메이븐(Maven)은 pom.xml 파일을 기반 실행되는데 POM은 "Porject Object Model"의 약어로 반복적으로 진행되어 왔던 프로젝트 빌드, 리포트, 문서화 작업을 지원할 수 있다.

메이븐 프로젝트를 생성하면 pom.xml 파일은 프로젝트 최상위 디렉토리 생성이 되며, 메이븐 설정에 맞게 소스와 리소스 파일들이 자동으로 배치되어 구성되기 때문에 Git과 같은 소스 버전관리 시스템을 통한 소스공유를 하더라도 메이븐 프로젝트 구조는 같기 때문에 서로 다른 플랫폼에서 프로젝트를 생성하고 빌드하더라도 문제가 발생하지 않는다는 장점이 있다.

Pom.xml 구성 #

pom.xml에서 진행하는 주요 설정은 설정은 크게 프로젝트 정보, 빌드 설정, 빌드 환경, 프로젝트 연관성과 의존성 4가지가 있다.

Maven 자바 프로젝트 설정 예시 (pom.xml) #

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  http://maven.apache.org/maven-v4_0_0.xsd">

  <!-- 프로젝트 정보 설정 ->
  <modelVersion>4.0.0</modelVersion>
  <groupId>maven-example</groupId>
  <artifactId>example</artifactId>
  <packaging>jar</packaging>
  <version>1.0.0</version>
  <name>example</name>

  <!-- 프로젝트 속성 설정 ->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <junit.version>4.12</junit.version>
  </properties>

  <!-- 연관성과 의존성 설정 ->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

위의 예시파일은 MAVEN 4.0 기준으로 설정되어 있으며, 아파치 그룹에서 제공하는 기본 메이븐 저장소(Repository)에서 프로젝트 실행 환경을 위한 의존성 여부를 확인하고 필요한 자바 라이브러리를 모두 다운로드 받도록 구성되어 있다.

  • modelVersion : 메이븐 프로젝트 구성을 위해 사용되는 메이븐 버전(여기선 4.0을 사용하고 있음)
  • groupId + artifcatId : 메이븐 프로젝트의 프로젝트 그룹과 하위 그룹 이름에 대한 설정으로 필수 입력정보이다. 아파치 그룹의 프로젝트와 구성을 본적이 있다면 쉽게 이해할 수 있다. 대표적인 아파치 그룹의 프로젝트 중에 commons 프로젝트(http://commons.apache.org/)를 살펴보면 해당 프로젝트는 I/O 유틸리티나 DBCP 등의 많은 하위 프로젝트로 구성된 것을 알 수 있다.

Apache Project

  • groupId는 "commons"와 같이 상위 프로젝트 이름이 되고, artifcatiId는 "commons-io"와 같이 그 하위 프로젝트라고 생각하면 이해가 쉬울 것이다.
  • version : 현재 프로젝트의 버전으로 프로젝트 수행 그룹에서 사용하는 버전 관리 체계를 사용하면 된다.
  • packaging : 프로젝트 배포를 위한 패키지 방식을 선언하는 것으로 기본은 jar(Java Archive)로 되어 있다. 메이븐에서 지원하는 형식은 pom, jar, maven-plugin, ejb, war, ear, rar 를 지워해 준다. 전자정부 프레임워크(eGov)나 일반 업무용 프로젝트를 주로 수행하는 그룹이라면 jar와 war 두 개중 하나를 선택하면 될 것이다.
  • properties : 메이븐 설정(pom)에 사용되는 속성을 설정한다. properties에 설정된 요소(element)들은 위의 예제에서 < junit.version > 로 설정된 속성 값은 ${ junit.version } 로 junit 의존성 설정에 사용된 것을 확인할 수 있다. project.x 로 설정된 내용은 메이븐 프로젝트에서 사용되는 속성값으로 위에 사용된 project.build.sourceEncoding 이나 project.reporting.outputEncoding은 문자열 인코딩 방식에 대한 설정이며, 다국어 지원을 위한 UTF-8 사용이 가장 무난해 보인다.
  • dependency : 프로젝트 연관성과 의존성에 대한 설정으로 메이븐 저장소에 등록된 의존성 라이브러리들 중에 필요한 라이브러리 정보를 입력하면 된다.

프로젝트 연관성과 의존성 라이브러리 검색 및 추가하기 #

메이븐의 가장 큰 장점으로 필요한 라이브러리에 대한 설정만으로 그와 연관된 모든 연관 라이브러리들을 한 번에 빌드 경로에 추가할 수도 있고 라이브러리 업데이트를 수행하는 경우에도 동시에 연관 라이브러리들을 함께 업그레이드할 수 있다는 것이다. 필요한 라이브러리들이 메이븐 저장소에 등록되었는지 검색하고 해당 정보를 pom.xml 파일에 설정을 추가하면 된다.

필요한 라이브러리 검색은 메이븐 저장소(https://mvnrepository.com/)에 접속한 후 메이븐 프로젝트의 groupId나 artifcatId를 입력해서 검색할 수 있으며, 자바 클래스 이름을 입력해도 검색이 가능하다. 다음은 junit 을 검색했을 때 나오는 결과로 등록된 junit 라이브러리 버전들에 대한 목록을 확인할 수 있다.

Maven search

위의 화면에서 4.12 버전을 선택하면 다음과 같이 해당 라이브러리를 Maven, Gradle 같은 빌드 툴들에 맞는 참조 설정 값들을 확인할 수 있다. 여기서는 Maven 탭을 선택하고 의존성 설정 내용을 복사해 pom.xml 에 추가하면 해당 라이브러리와 의존성 포함 라이브러들을 설치할 수 있다.

Maven library

의존성 설정 내용을 보면 groupId, artifactId, version 정보가 필수 항목으로 되어 있는데, 프로젝트 정보 항목에 필수 항목과 동일한 것을 알 수 있다.

Reference #

Incoming Links #

Related Data Sciences #

Related Bioinformaticses #

Suggested Pages #

0.0.1_20140628_0