이 내용은 박재성님이 집필하신 [자바 세상의 빌드를 이끄는 메이븐] 책을 그대로 정리한 것이다.
회사에서 스터디를 하는데 문서 보안 때문에 어쩔수 없이 블로그를 이용하게 되었고,
위 내용은 박재성님의 허락을 받았습니다.
2 메이븐 설치 및 템플릿 프로젝트 생성
1) 설치
- http://maven.apache.org/download.html
- apache-maven-3.0.4-bin.zip 파일을 다운받아서 압축을 품
D:\maven
- 환경 변수에 MAVEN_HOME 추가
- PATH에 MAVEN_HOME\bin 추가
- 프롬프트에서 > mvn -version 으로 설치 확인
2) 템플릿 프로젝트 생성
- 메이븐은 프로젝트의 소스 디렉토리, 테스트 소스 디렉토리, 웹 리소스 디렉토리 등의 기본 설정이 예약되어 있음
- 메이븐은 템플릿 프로젝트로 프로젝트를 생성하면 프로젝트의 뼈대를 자동 생성, 이 기능을 아키타입archetype이라 함
-> cd D:\workspace-indigo\
> mvn archetype:generate -DgroupId=com.samsunglife -DartifactId=webzine -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
- 기본 소스 디렉토리는 src/main/java, 기본 테스트 소스 디렉토리는 src/test/java
- groupId 는 일반적으로 생성하는 프로젝트 도메인명, artifactId는 프로젝트 이름, 자세한 내용은 뒤에서 설명
<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>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>webzine</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>
pom.xml 내용은 뒤에서 설명
3) 메이븐 기본 명령어
- mvn [options] [<goal(s)>] [<phase(s)>] 형태로 실행 가능함
- 메이븐 명령은 옵션, 골, 페이즈 조합으로 실행, 옵션은 메이븐 설정 파일(pom.xml)이 없는 곳에서도 실행 가능하며, 골과 페이즈는
메이븐 기반으로 진행하는 프로젝트의 디렉토리에서 실행
- mvn -help 로 사용할수 있는 명령 확인, 가장 많이 사용하는 옵션중 하나 mvn -Dmaven.test.skip=true
- 여러개의 페이즈와 골을 실행할수 있음, 자세한 내용은 뒤에서 설명
- > D:\workspace-indigo\webzine 로 이동해서
mvn test 를 실행해 봄
resources:resource에서 뭔가 하고, compiler:compile 에서 src/main/java 소스 컴파일, compiler:testCompile 에서 src/test/java 테스트 코드 컴파일
마지막 단계 surefire:test 단계에서 단위 테스트 실행
4) 웹 프로젝트 템플릿 생성
- 앞의 예제에서 archetypeArtifactId 인자로 아키타입 아이디 전달, 내가 만들고 싶은 프로젝트는 jar 가 아니라
웹 애플리케이션(war)
- 총 58개의 아키타입 제공, archetypeArtifactId를 지정할수 있지만
mvn archetype:generate 만 샐행해서 생성하는것도 가능
- 메이븐은 아키타입의 종류에 따라 카탈로그를 나누어 관리
internal : 58개, local:본인이 만든 아키타입을 관리하기 위한 카탈로그, remote:외부 286개
기본 카탈로그 값은 remote, local
- > mvn archetype:generate -DarchetypeCatalog=internal 을 실행하면 58개의 아키타입 목록 확인
- > mvn archetype:generate 명령을 실행하면 대화 모드로 템플릿 프로젝트 생성
- D:\workspace-indigo\webzine 디렉토리 삭제
- > mvn archetype:generate -DarchetypeCatalog=internal 실행
19번 입력, groupId : com.samsunglife, artifactId : webzine 입력
Caused by: org.apache.maven.plugin.MojoFailureException: The desired archetype does not exist
(org.apache.maven.archetypes:maven-archetype-webapp:RELEASE) =====> 뭔가 오류가 나서 패스
- > mvn archetype:create -DgroupId=com.samsunglife -DartifactId=webzine -DarchetypeArtifactId=maven-archetype-webapp 실행
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>
- packaging 이 jar -> war <build><finalName> 옵션이 있으면 아마 war 파일 이름이 바뀜, 뒤에서 설명