2009. 12. 4. 01:23 빌드/maven
Maven 3장 - 메이븐 설정 파일
이 내용은 박재성님이 집필하신 [자바 세상의 빌드를 이끄는 메이븐] 책을 그대로 정리한 것이다.
회사에서 스터디를 하는데 문서 보안 때문에 어쩔수 없이 블로그를 이용하게 되었고,
위 내용은 박재성님의 허락을 받았습니다.
3 메이븐 설정 파일
- 메이븐을 사용하려면 알아야 할 두가지 설정 파일이 있음
메이븐 빌드 툴과 관련한 설정 파일로 settings.xml
메이븐 기반 프로젝트에서 사용하는 설정 파일로 이름은 기본적으로 pom.xml, 이름 변경 가능
1) settings.xml
- MAVEN_HOME/conf 디렉토리에 위치, 모든 사용자에게 동일한 설정 제공
- 사용자 별로 설정을 원한다면
C:\Documents and Settings\[현재로그인아이디]\.m2 디렉토리에 settings.xml 설정 가능, 복사가 좋음
- 메이븐은 빌드할때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 pc로 다운로드
다운로드한 라이브러리는 개발자 pc의 특정 디렉토리에 위치하게 되는데 이 디렉토리를 로컬 저장소라 부름
로컬 저장소 기본 설정은
C:\Documents and Settings\[현재로그인아이디]\.m2\repository
이 경로를 바꾸고 싶다면 다음과 같은 방법으로 변경
MAVEN_HOME/conf 디렉토리의 settings.xml 파일을 열어서 <localRepository>가 주석 처리 된것을 확인
주석을 제거한 다음 원하는 경로를 세팅
<localRepository>D:\repositories\mavenRepository</localRepository>
2) pom.xml
- 프로젝트 객체 모델 Project Object Model
- 메이븐은 pom.xml 을 읽어 빌드 실행, 다른 파일 설정을 사용하고 싶은 경우 -f 또는 --file 사용
- > mvn -f mypom.xml test
- 메이븐은 크게 4개의 카테고리로 구분(프로젝트 기본정보, 빌드설정, 프로젝트 관계 설정, 빌드 환경)
가. 프로젝트 기본 정보
프로젝트 이름, 프로젝트 url, 프로젝트에 참여하는 개발자 목록, 프로젝트의 라이센스 설명 생략
- name : 프로젝트 이름
- url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능하다.
나. 빌드설정
- 메이븐 빌드와 관련된 기본적인 빌드 설정을 변경하기 위한 카테고리
기본 소스 디렉토리나 리소스 디렉토리에 대한 변경, 플러그인 설정 변경, 새로운 플러그인 추가
다양한 리포트 문서
다. 프로젝트 관계 설정
- 다른 라이브러리 또는 프로젝트와 의존 관계를 가지며, 각 프로젝트 사이에서 상속 관계를 가지는 경우도 있음
이런 경우 각 프로젝트의 관계를 관리
라. 빌드 환경
- 모든 프로젝트는 다양한 환경에서 배포가 가능하며, 환경에 따른 변경 부분을 관리하는 카테고리
메이븐에서는 다양한 환경을 지원할수 있도록 프로파일 기능을 제공, 뒤에 자세히 설명
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>com.samsunglife</groupId>
<artifactId>webzine</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>webzine Maven Webapp</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>
<build>
<finalName>webzine</finalName>
</build>
</project>
. project : 최상위 엘리먼트
. modelVersion : POM 모델의 버전, 가장 최근 버젼은 4.0.0, POM 모델이 변경되지 않으면 수정할 필요가 없음
. groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정, 일반적으로 도메인 이름을 사용
. artifactId : 프로젝트를 식별하는 유일한 아이디를 의미
. packaging : 프로젝트를 어떤 형태로 패키징 할지를 결정, jar, war, ear, pom 등이 있음
. version : 프로젝트의 현재 버젼, 개발이 완료된 버전의 경우 1.0, 2.0 과 같이 사용, 프로젝트 개발 중에는
SNAPSHOT을 접미사로 사용할수 있음. SNAPSHOT은 메이븐 예약어, SNAPSHOT을 사용하면 라이브러리를
다른 방식으로 관리
. name : 프로젝트 이름
. url : 프로젝트 사이트가 있다면 사이트 url 을 등록
. dependecies : <dependencies/> 엘리멘트와 하위 엘리멘트인 <dependency/>는 프로젝트와 의존 관계에 있는
라이브러리를 관리. 메이븐 저장소에서 JUnit 3.8.1 버젼을 PC에 다운
- 메이븐은 중앙 저장소를 가지고 있으며, 모든 라이브러리를 관리해야 하기 때문에 groupId + artifactId 값이 유일한 값
3) 최상위 POM 설정 파일
- 기본적인 프로젝트 디렉토리 구조와 메이븐에서 할수 있는 기본적인 플러그인 정보를 포함하고 있는 최상위 POM 설정 파일을 제공
최상위 설정 파일은 메이븐에 포함되어 있는 jar 파일을 통해 배포
- 최상위 POM 파일은 우리가 생성하는 모든 메이븐 설정 파일의 부모 POM 역할을 하며, 모든 설정파일이 이 파일을 상속
- 상속하고 있는 POM 파일의 내용을 확인 하려면
mvn help:effective-pom
- > D:\workspace-indigo\webzine>mvn help:effective-pom 실행
[최상위 POM 파일]
- 최상위 설정 파일 설정
. build : 프로젝트 빌드와 관련한 기본적인 소스 디렉토리 구조, 빌드 산출물 디렉토리 구조, 빌드시 사용할 플러그인 정보를 관리
. sourceDirectory : 실제 서비스를 담당하는 자바 소스 코드를 관리하는 디렉토리, 기본 값은 src/main/java
. testSourceDirectory : 테스트 소스를 관리하기 위한 디렉토리, 기본값은 src/test/java
. outputDirectory : sourceDirectory 의 소스를 컴파일한 결과물이 위치하는 디렉토리, 기본값은 target/classes
. testOutputDirectory : testSourceDirectory 의 소스를 컴파일한 결과물이 위치하는 디렉토리. 기본값은 target/test-classes
. resources : 서비스에 사용되는 자원을 관리하는 디렉토리. 기본값은 src/main/resources
. testResources : 테스트 시에 필요한 자원을 관리하기 위한 디렉토리. 기본 값은 src/test/resources
. repositories : 빌드할때 접근할 저장소의 위치를 관리함. 메이븐 기본 저장소 url 은 http://repo1.maven.org/maven2
. pluginManagement : 빌드 설정 과정에서 관리하는 플러그인 목록. 이 엘리먼트에 설정되어 있다고 반드시 사용되는 것은 아님
- 메이븐을 처음 사용하는 대부분의 개발자들은 최상위 POM에서 기본값을 정의하고 있기 때문에 메이븐 기반 프로젝트는 반드시 이
구조를 따라야 함. 만약 최상위 POM에서 정의한 기본 설정을 변경하고자 한다면 하위 설정 파일에서 재 정의
- 만약 src/main/java -> src/java 로 변경하고 싶다면
<build>
<finalName>webzine</finalName>
<sourceDirectory>src/java</sourceDirectory>
.... 생략 ....
실습 해 보자
4) 웹진 프로젝트 기본 디렉토리 설정 완료
- war 프로젝트로 생성한 프로젝트는 웹 자원을 관리하는 디렉토리만 있고 자바 소스를 관리하는 디렉토리가 없음
src 디렉토리 밑에 수동으로 자바 소스 디렉토리를 추가
src/main/ 디렉토리 밑 java.com.samsunglife 추가
src/ 디렉토리 밑에 test.java.com.samsunglifecom 추가
- webapp 변경하는 예제
src/main/webapp 를 webapp로 재 정의 하고 싶은 경우
<build>
<finalName>webzine</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warSourceDirectory>webapp</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
- mvn package 를 해 보면
target 디렉토리가 생성됨
. target/classes : src/main/java 디렉토리의 자바 소스가 컴파일된 class 파일과 src/main/resources 디렉토리 파일이 복사됨
. target/test-classes : src/test/java 디렉토리의 자바 소스가 컴파일된 class 파일과 src/test/resources 디렉토리 파일이 복사됨
. target/webzine : war로 패키징 하는데 필요한 모든 자원의 위치 target/classes 디렉토리 하위의 파일이
webzine/WEB-INF/classess 파일로 복사. target/test-classes 디렉토리 하위 파일은 제외
. target/surefire-reports : 빌드하면서 생성된 리포트 문서의 위치
- 웹 프로젝트의 뼈대를 만드는 방법은 두가지 방법이 있음
. m2eclipse 이클립스 플러그인 기반으로 메이븐 프로젝트를 생성, 뒤에서 설명
. 위에 방법과 같은 maven-archetype-webapp 로 만든후 자바 소스 디렉토리 수동 추가
'빌드 > maven' 카테고리의 다른 글
Maven 6장 - 메이븐과 이클립스 통합 (0) | 2012.02.22 |
---|---|
Maven 5장 - 메이븐을 이용한 의존 라이브러리 관리 (0) | 2012.02.22 |
Maven 4장 - 메이븐 라이프 사이클 (0) | 2009.12.04 |
Maven 2장 - 메이븐 설치 및 템플릿 프로젝트 생성 (0) | 2009.12.03 |
Maven 1장 - 내가 꿈꾸는 개발 환경 (0) | 2009.12.01 |