#0. 용어정리
- 메이븐 라이프 사이클 : 미리 정의한 빌드 순서
- 페이즈 : 라이프 사이클의 빌드 단계
#1. 메이븐 라이프 사이클
1. 기본 라이프 사이클
페이즈 |
의존관계 |
compile |
|
test |
compile -> test |
package |
test -> package |
install |
|
deploy |
|
최종적 순서 : compile (->test (->package))
** 기본 라이프사이클 진행 순서
컴파일 (compile) -> 테스트 (test) -> 패키징 (package) -> 배포( install , deploy )
2. clean 라이프사이클
clean : 메이븐 빌드를 통하여 생성된 모든 산출물을 삭제 (target 디렉토리 삭제)
3. site 라이프사이클
페이즈 |
설명 |
site |
target/site 디렉토리에 문서 사이트 생성 |
site-deploy |
생성한 문서 사이트를 설정되어 있는 서버에 배포 |
#2. 페이즈와 플러그인의 관계
메이븐의 기본 라이프 사이클은
페이즈를 기반으로 빌드를 실행하며,
각 페이즈를 실행할 때
기본으로 연결된 플러그인의 골을 실행하는 구조로 동작한다
#3. 메이븐을 이용한 의존 라이브러리 관리
1. 메이븐 저장소
- 중앙 저장소
오픈소스 라이브러리, 메이븐 플러그인, 메이븐 아키타입을 관리하는 저장소
http://repo1.maven.org/maven2/
- 원격 저장소
중앙 저장소에 없는 라이브러리를 한 곳에 모아두기 위하여 별도의 메이븐 저장소를 설치 해 관리
사내 원격 저장소 나 외부에 위차하는 외부(공개) 원격 저장소와 같은 것들
- 로컬 저장소
메이븐을 빌드할 때 다운로드하는 라이브러리, 플러그인을 관리하는 개발자 PC의 저장소
기본 로컬 저장소는 USER_HOME/.m2/repository
▲메이븐 라이브러리와 저장소의 관계도
▲중앙 저장소의 JUnit 화면
로컬 저장소에 특정 라이브러리가 없을 경우 중앙 저장소의 jar 파일을 로컬 저장소에 다운로드한다.
▲다운로드한 라이브러리가 저장되는 로컬 저장소 디렉토리 구조
#4. 위키북 프로젝트에 의존 라이브러리 추가하기
pom.xml에 스트럿츠2, 스프링, 아이바티스 라이브러리 의존성 추가
<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>net.bok</groupId> <artifactId>wikibook</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>wikibook Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <!-- Spring Framework --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.0.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.0.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.0.1.RELEASE</version> </dependency>
<!-- Struts2 Framework --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.1.8</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.1.8</version> </dependency>
<!-- IBatis Framework--> <dependency> <groupId>org.apache.ibatis</groupId> <artifactId>ibatis-sqlmap</artifactId> <version>2.3.0</version> </dependency> </dependencies> <build> <finalName>wikibook</finalName> <sourceDirectory>src/java</sourceDirectory> <testSourceDirectory>src/test</testSourceDirectory> <resources> <resource> <directory>src/resources</directory> </resource> </resources> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <warSourceDirectory>webapp</warSourceDirectory> </configuration> </plugin> </plugins> </build> </project> |
** 의존 관계로 설정한 라이브러리를 프로젝트로 복사
mvn clean dependency:copy-dependencies package
** 의존 관계에 있는 라이브러리들을 tree구조로 파악
mvn dependency:tree
** 의존성 전이
오픈 소스 프레임워크가 추가될 때마다 해당 프레임 워크와 의존 관계에 있는 라이브러리를 자동으로 추가 하도록 하는 것
#5. 속성
설정파일에서 발생하는 중복 설정을 제거하기위해 속성(<properties>엘리먼트)을 정의하고 설정파일 전체에서 사용할 수 있다.
속성적용 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>net.bok</groupId> <artifactId>wikibook</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>wikibook Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <struts2.version>2.1.8</struts2.version> <spring.version>3.0.1.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <!-- Spring Framework --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency>
<!-- Struts2 Framework --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts2.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>${struts2.version}</version> </dependency>
<!-- IBatis Framework--> <dependency> <groupId>org.apache.ibatis</groupId> <artifactId>ibatis-sqlmap</artifactId> <version>2.3.0</version> </dependency> </dependencies> <build> <finalName>wikibook</finalName> <sourceDirectory>src/java</sourceDirectory> <testSourceDirectory>src/test</testSourceDirectory> <resources> <resource> <directory>src/resources</directory> </resource> </resources> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <warSourceDirectory>webapp</warSourceDirectory> </configuration> </plugin> </plugins> </build> </project> |