이클립스 메이븐(Maven) 프로젝트 생성 및 디렉터리 폴더의 구조 및 의미 pom.xml 각 항목 설명

Maven 프로젝트란?

기존의 일반적인 이클립스 프로젝트에서 라이브러리를 추가할 경우 라이브러리 파일들을 프로젝트의 lib 폴더에 넣어서 사용하곤 했었는데, Maven 프로젝트를 사용하면 라이브러리의 추가 및 제거가 편해지고 의존성 관리와 SVN, git 등을 이용한 형상관리 서버와 도 손쉽게 연동할 수 있습니다.

라이브러리 관리의 경우 프로젝트에 파일을 복사하는 방식이 아닌 pom.xml 파일에 설정 파일을 텍스트로 작성함으로써 관리할 수 있게 됩니다.


Maven 프로젝트 생성 방법 및 순서

  1. 이클립스 메뉴 File -> Maven Project 클릭
  2. 프로젝트 생성 위치 지정
    • 기본값은 현재 워크스페이스이고, 다른 경로에 생성도 가능합니다.
  3. 메이븐 프로젝트 템플릿 선택
    • 선택되는 타입에 따라 기본 설정 및 라이브러리가 달라집니다.
    • 일반적인 웹앱의 경우에는 Filter에 maven.archetype-webapp으로 검색 후 선택
  4. Group Id와 Artifact Id 설정
    • group Id - 프로젝트의 고유 ID 보통 프로젝트의 도메인이 있다면 도메인의 이름을 역순으로 적습니다.
    • artifactId - 보통 프로젝트 명을 기입하며, 패킹징 및 버전관리 때 해당 Id가 사용됩니다.
    • Package - GroupId 와 artifact Id가 혼합되어 패키지 명이 생성됩니다.
  5. Maven 프로젝트 기본 패키지 다운로드 승인
    • 이클립스 Console 탭을 보면 파일들이 다운로드 되며, Y를 키인하여 승인
Maven-Project-Create-Download-Confirm
Maven Project를 추가하면 관련 리소스를 다운로드 승인을 위해 Y키를 입력해야 한다.


Maven 프로젝트 디렉토리 구조 및 각 폴더 의미

  • src
    • main
      • java - 자바 패캐지와 java 소스 파일 위치
      • resources - 각종 설정 파일(.properties, .xml)들이 위치
      • webapp  - HTML, CSS 등 웹 관련 파일 위치
    • test
      • java - 테스트 관련 자바 패키지와 소스 파일 위치
      • resources - 테스트 관련 설정 파일 위치
    • target - 컴파일 및 패키징된 결과 파일 위치
    • pom.xml - Maven 설정 파일
생성된 프로젝트에 폴더가 보이지 않는 경우는 생성 후 사용하시면 됩니다.



Maven 프로젝트 설정파일 pom.xml

pom_xml-explain
Maven 프로젝트는 pom.xml 파일에 작성하는 것으로 라이브러리를 사용할 수 있습니다.


위는 Maven 프로젝트 생성시에 만들어지는 pom.xml 파일의 기본형입니다. 각 태그의 의미는 아래와 같습니다.

pom.xml 태그 항목 설명

  • project - HTML태그와 비슷한 의미로 pom.xml 설정파일의 최상위 루트 태그의 의미
  • modelVersion - pom 파일의 버전을 의미
  • packaging - 프로젝트 패키징 방법을 의미하며, jar, war, ear 등으로 설정할 수 있습니다.
  • version - 프로젝트의 버전을 의미하며, 버전 관리 등에 사용됩니다.
  • name - 프로젝트 명
  • url - 프로젝트에서 사용하는 url이 있다면 기입합니다.

dependencies 태그

Maven 프로젝트를 사용하면서 얻을 수 있는 가장 큰 장점인 라이브러리 관리의 편리성인데요. 프로젝트에 사용하고자 하는 라이브러리를 dependencies 태그 의 하위 태그로 dependency 태그를 이용하여 지정할 수 있습니다.

dependency 태그 항목 설명

  • groupId - 라이브러리 그룹Id
  • artifactId - 라이브러리 명
  • version - 라이브러리 버전
  • scope - 라이브러리 실행 범위
    • compile - 기본값으로는 컴파일 할 때 필요.
    • runtime - 런타임 때 필요함. 컴파일에는 필요하지 않지만, 프로젝트가 실행될 때 필요한 경우
    • provided - 컴파일 때 필요하고 실제 런타임 상황에서는 컨테이너 형식으로 제공되는 모듈로써, servlet, jsp api 등이 해당되며 배포 시에는 제외 됨.
    • test : 테스트 컴파일 할 때 필요한 라이브러리 이며 배포시에는 제외됩니다.