부스트코스 강의를 듣고 정리한 내용.

Maven

저번에 JSTL을 배울 때 관련 라이브러리를 다운로드 한 다음 WEB-INF/lib폴더에 복사해 설치했었다. 이러한 방식은 관련된 라이브러리가 많아질수록 상당히 불편해진다. 이러한 문제를 해결하기 위해 다양한 도구들이 존재하는데, Maven도 그 중 하나이다.

Maven을 사용하면 설정 파일에 몇 줄 적어줌으로써 직접 다운로드 받지 않고 라이브러리를 사용할 수 있다. 또한 프로젝트에 참여하는 개발자가 많아지게 되면, 프로젝트를 빌드하는 방법에 대하여 가이드하는 것도 쉬운 일이 아니다. Maven을 사용하게 되면 Maven에 설정한 대로 모든 개발자가 일관된 방식으로 빌드를 수행할 수 있게 된다. 그리고 Maven은 다양한 플러그인을 제공해 굉장히 많은 일들을 자동화시킬 수 있다.

Maven 기본

Archetype을 이용하여 Maven 기반 프로젝트를 생성할 경우 생성된 프로젝트 하위에 pom.xml 파일이 생성된다.

<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>kr.or.connect</groupId>
    <artifactId>examples</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>mysample</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

각각의 태그의 의미는 다음과 같다:

  • project: pom.xml 파일의 최상위 루트 엘리먼트(Root Element)
  • modelVersion: POM model의 버전
  • groupId: 프로젝트를 생성하는 조직의 고유 아이디 결정. 일반적으로 도메인 이름을 거꾸로 적는다.
  • artifactId: 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디 결정. Maven을 이용하여 pom.xml을 빌드할 경우 artifactid-version.packaging의 규칙으로 artifact가 생성된다. 위 예의 경우 빌드할 경우 examples-1.0-SNAPSHOT.jar 파일이 생성된다.
  • packaging: 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정한다. jar, war, ear 등이 온다.
  • version: 프로젝트의 현재 버전. 개발 중에는 접미사로 SNAPSHOT을 사용한다.
  • name: 프로젝트 이름
  • url: 프로젝트 사이트가 있다면 사이트 URL을 등록할 수 있음

Maven 을 이용할 경우 얻게 되는 큰 이점 중의 하나는 dependency management 기능인데, 위 pom.xml 파일에서 <dependencies/> 엘리먼트가 dependency management 기능의 핵심이라고 할 수 있다. 해당 엘리먼트 안에 필요한 라이브러리를 지정함.