3D Graphic Technical Artist

[Maven 실습2] 메이븐 라이프사이클 본문

공부(~2014)/Maven

[Maven 실습2] 메이븐 라이프사이클

er1ca 2013. 5. 9. 16:27

#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>