Whiteship's Note


Build Lifecycle(site)

Build/Maven : 2007.11.27 12:16


site

지금까지 생성된 파일(구조물 artifact)을 저장소에 빌드하고 위치시키는 과정에 대해 살펴봤습니다. 그러나 Maven은 단순히 코드를 생성하는 것보다 뭔가를 더 해줍니다, 프로젝트에 대한 리포트나 다큐먼트를 생성해주기도 합니다. 그런 일들을 해주는 site는 다음과 같은 Phase로 구성되어있습니다.

pre-site
site - site와 보고서를 생성
post-site
site-depoly - site를 원격 서버에 배포

site 라이프사이클에 묶여있는 기본 Goal은 다음과 같습니다.

site - site:site
site-deploy - site:deploy

default 빌드 라이프사이클과 다르게, 패키징 타입에 따라 달라지는 것이 없습니다. 이전에도 이 Phase를 사용해 본적이 있습니다.

mvn site

이것에 대해서는 나중에 다른 챕터에 다룹니다.

'Build > Maven' 카테고리의 다른 글

Site Generation  (0) 2007.12.03
http://mvnrepository.com/  (0) 2007.12.02
Profile  (0) 2007.11.30
Archetype  (0) 2007.11.29
Plugin  (4) 2007.11.28
Build Lifecycle(site)  (0) 2007.11.27
Build Lifecycle(default 자세히)  (0) 2007.11.27
Build Lifecycle(default)  (0) 2007.11.27
Build Lifecycle(clean)  (2) 2007.11.27
POM  (0) 2007.11.26
mvn site  (0) 2007.11.20
top


Build Lifecycle(default 자세히)

Build/Maven : 2007.11.27 12:11


Resources

process-resource는 간단하게, src/main/resources 디렉터리에 있는 파일들을 복사하여 target/classes 디렉터리에 복사한다고 생각할 수 있습니다. 이때, ${...}를 텍스트로 대체할 수 있는 필터를 사용할 수 있습니다.

예를들어, src/main/resources/META-INF/service.xml 이 다음과 같을 때..

<service>
  <!-- This URL was set by project version ${project.version} -->
  <url>${jdbc.url}</url>
  <user>${jdbc.username}</user>
  <password>${jdbc.password}</password>
</service>

src/main/filters/default.properties 파일에 그 값들을 외부로 빼낼 수 있습니다.

jdbc.url=jdbc:hsqldb:mem:mydb
jdbc.username=sa
jdbc.password=

이 두개의 파일을 다음과 같이 설정하여 사용할 수 있습니다.

<build>
  <filters>
    <filter>src/main/filters/default.properties</filter>
  </filters>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

POM에 프로퍼티 파일에 명시했던 값들을 설정하면, 프로퍼티 파일을 사용하지 않을 수도 있다고 합니다.

Compile

컴파일 할 자바 버전을 명시할 수 있습니다. 기본으로 JDK 1.3 호환 코드로 컴파일 것으로 가정하기 때문에, 다음과 같이 명시적으로 사용할 버전을 설정해주어야 합니다.

<project>
  ...
  <build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>

Test Resource

process-test-resource는 process-resource와 거의 같습니다. 차이가 있다면 POM에 testResources 엘리먼트 내부에 testResouce 엘리먼트로 정의해둔 Test Resource들을 target/test-classes에 복사합니다.

Test

이 Phase는 surefire:test Goal과 연관되어있습니다. Surefire는 *Test.java로 끝나는 파일들을 기본으로 실행합니다. 물론 별도로 설정할 수도 있는데, Appendix A에서 다룹니다. JUnit을 기본 테스트 프레임워크로 기대하고 있지만, TestNG를 다음과 같이 설정할 수도 있습니다.

<dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>4.7</version>
      <scope>test</scope>
      <classifier>jdk14</classifier>
</dependency>

'Build > Maven' 카테고리의 다른 글

http://mvnrepository.com/  (0) 2007.12.02
Profile  (0) 2007.11.30
Archetype  (0) 2007.11.29
Plugin  (4) 2007.11.28
Build Lifecycle(site)  (0) 2007.11.27
Build Lifecycle(default 자세히)  (0) 2007.11.27
Build Lifecycle(default)  (0) 2007.11.27
Build Lifecycle(clean)  (2) 2007.11.27
POM  (0) 2007.11.26
mvn site  (0) 2007.11.20
Maven 용어 3  (0) 2007.11.19
top


Build Lifecycle(default)

Build/Maven : 2007.11.27 11:48


default

이 라이프사이클은 Maven의 action 프레임워크의 핵심입니다. 표준적인 빌드 절차 순으로 구성되어 있습니다.

vlidate - 프로젝트가 올바른지 그리고 필요로 하는 정보가 모두 가용한지 확인
generate-sources - 컴파일과 관련된 소스 코드 생성
process-srouces - 소스 코드 처리
generate-resources - 패키지에 포함되어 있는 리소스 생성
process-resources - 목적지로 리소스를 복사하고 처리, 패키징 준비
compile - 소스 코드 컴파일
process-classes - 컴파일 후 생성된 파일들의 전 처리.
generate-test-srouces
process-test-sources
generate-test-resources
process-test-resources
test-compile
test - 단위 테스트 프레임워크를 사용하여 테스트를 실행
prepare-package - 패키징하기 전에 필요한 작업을 수행
package - 컴파일 된 코드를 JAR와 같은 배포용 형태로 묶음
pre-integration-test - 통합 테스트에 필요한 작업 수행
integration-test - 통합 테스트를 수행할 곳에 패키지를 배포하고 실행
post-integration-test - 통합 테스트 후에 해야할 일 수행
verify - 패키지를 올바른지 검증
install - 패키지를 로컬 저장소에 설치
deploy - 최종 패키지를 원격 저장소에 복사

프로젝트의 패키징 타입에 따라 위의 Phase들에 연관되어 있는 Goal들이 다릅니다. 따라서 pom 패키징 타입인 프로젝트와 jar 패키징 프로젝트가 같은 빌드 라이프사이클을 가지고 있더라고 각각의 Phase를 실행할 때마다 하는 일이 달라집니다. 예를들어, 위의 경우 package Phase에서 pom 패키징 타입의 프로젝트는 site:attach-descriptor Goal을 실행하고, jar 패키징 타입의 프로젝트는 jar:jar를 실행합니다.

각각의 패키징 타입에 따라 연관되어있는 goal들은 다음과 같습니다.

jar :: 기본 패키징 타입.

process-resources - resources:resources
compile - compiler:compile
process-test-resources - resources:testResources
test-compile - compiler:testCompile
test - surefire:test
package - jar:jar
install - install:install
deploy - deploy:deploy

pom :: 가장 간단한 패키징 타입. 생성되는 파일은 pom 뿐. 별도의 jar나 ejb같은 패키지는 없음.

package - site:attach-descriptor
install - install:install
deploy - deploy:deploy

mvn-plugin :: 몇 가지 기술 파일들과 저장소의 데이터에 변경을 가합니다. 모든 Goal들은 플러그인에 들어있다는 것만 알고 넘어가라네요.

generate-resources - plugin:descriptor
process-resources - resources:resources
compile - compiler:compile
process-test-resources - resources:testResources
test-compile - compiler:testCompile
test - surefire:test
package - jar:jar, plugin:addPluginArtifactMetadata
install - install:install, plugin:updateRegistry
deploy - deploy:deploy

ejb :: ejb 플러그인을 필요로 합니다.

process-resources - resources:resources
compile - compiler:compile
process-test-resources - resources:testResources
test-compile - compiler:testCompile
test - surefire:test
package - ejb:ejb
install - install:install
deploy - deploy:deploy

war :: src/main/webapp/WEB-INF/ 디렉터리에 web.xml 설정 파일을 필요로 합니다.

process-resources - resources:resources
compile - compiler:compile
process-test-resources - resources:testResources
test-compile - compiler:testCompile
test - surefire:test
package - war:war
install - install:install
deploy - deploy:deploy

ear :: 배포 기술자(applicaion.xml)로 구성되어있는 간단한 Java EE 구조체. 만약 application.xml 파일이 없다면, POM 파일에 기반하여 파일을 생성해줍니다.

generate-resources - ear:generate-application-xml
process-resources - resources:resources
package - ear:ear
install - install:install
deploy - deploy:deploy

par :: 뭔지 모르겠음.

process-resources - resources:resources
compile - compiler:compile
process-test-resources - resources:testResources
test-compile - compiler:testCompile
test - surefire:test
package - par:par
install - install:install
deploy - deploy:deploy

커스텀 패키징 타입을 만들 수도 있으며, 그에대한 내용은 나중에 다룹니다. 다음에는 위에서 간단하게 살펴봤던 default Phase들을 조금만 더 들여다보겠습니다.

'Build > Maven' 카테고리의 다른 글

Profile  (0) 2007.11.30
Archetype  (0) 2007.11.29
Plugin  (4) 2007.11.28
Build Lifecycle(site)  (0) 2007.11.27
Build Lifecycle(default 자세히)  (0) 2007.11.27
Build Lifecycle(default)  (0) 2007.11.27
Build Lifecycle(clean)  (2) 2007.11.27
POM  (0) 2007.11.26
mvn site  (0) 2007.11.20
Maven 용어 3  (0) 2007.11.19
Maven 용어 2  (0) 2007.11.19
top


Build Lifecycle(clean)

Build/Maven : 2007.11.27 11:33


Maven의 기반이 되는 두 가지 요소 중에 하나를 어제 살펴봤습니다. 프로젝트 하나를 객체로 보는 POM이었죠. 그리고 오늘은 또 다른 하나 빌드 라이프사이클을 공부할 차례입니다.

빌드 라이프사이클은 "여러 개의 Goal들에 순서를 매겨둔, Phase들의 연속체"라고 할 수 있습니다. Goal들은 Phase를 실행 할 프로젝트의 패키징 타입에 따라 달라집니다.

Maven에는 세 개의 표준 라이프 사이클이 존재 합니다. clean, default(또는 build), site 가 있습니다.

clean


세 개의 Phase로 구성되어 있는 매우 간단한 라이프사이클 입니다.
pre-clean
clean
post-clean

대부분은 clean:clean Goal과 연결되어 있는 "clean" Phase를 사용합니다. SuperPOM에 기본값으로 "target"이라고 설정되어 있는 빌드 디렉터리 안에 있는 모든 파일을 삭제하는 일을 합니다. mvn clean을 실행하면, clean Phase까지 연관되어 있는 모든 Goal들을 실행합니다.

사용자 삽입 이미지
clean 플러그인을 사용할 때 특정 파일을 삭제 대상에서 제외시키거나, 특정 파일만 삭제하도록 fileSet 엘리먼트 내부에 include 엘리먼트와 exclude 엘리먼트를 사용할 수 있습니다.

<project>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <configuration>
          <filesets>
            <fileset>
              <directory>othertarget</directory>
              <includes>
                <include>*.class</include>
              </includes>
            </fileset>
          </filesets>
        </configuration>
      </plugin>


'Build > Maven' 카테고리의 다른 글

Archetype  (0) 2007.11.29
Plugin  (4) 2007.11.28
Build Lifecycle(site)  (0) 2007.11.27
Build Lifecycle(default 자세히)  (0) 2007.11.27
Build Lifecycle(default)  (0) 2007.11.27
Build Lifecycle(clean)  (2) 2007.11.27
POM  (0) 2007.11.26
mvn site  (0) 2007.11.20
Maven 용어 3  (0) 2007.11.19
Maven 용어 2  (0) 2007.11.19
Maven 용어 1  (2) 2007.11.16
top