2013년 8월 8일 목요일

기존의 빌드 툴과 Maven

기존의 빌드
1)Make
Makefile 안에서 룰을 이용해서 의존관계를 표현
변수로 매크로를 지원하고 접미사 관련 룰 등을 명시
2)Ant
자바로 구현됨, 자바 프로젝트 빌드에 적합
XML 파일(build.xml)을 사용하여 빌드 프로세스와 의존성 정의
개발자가 임의로 Target을 만들고 원하는 의존관계를 설정할 수 있다
3)Gradle
AntMaven과 비슷한 컨셉
XML대신 DSL을 통해 프로젝트 정의
Groovy 기반

기존의 빌드 툴이 제공하는 기능
Preprocessing
Compilation
Packaging
Testing
Distribution

Maven이란?
아파치의 오픈 소스 빌드 툴이다(프로젝트 관리 툴이기도 하다).
대규모 프로젝트에서 발생하는 빌드 관련 문제를 해결하기 위해 등장했다.
Yiddish(이디시어-유대인어)의 뜻으로는 지식의 축적자
  (축적된 지식으로 이해하는 사람)라고 한다.
빌드, 문서화, 리포팅, 라이브러리 관리, 배포 등의 지식을 축적하고 관리하는 툴이다.
메이븐은 설정보다 관례(CoC;Convention over Configuration)라는 컨셉이다.
지정된 규칙에 따라 코드를 위치시키면 컴파일, 패키징, 문서화 등의
  나머지 작업들을 자동으로 수행한다.

Maven의 목적
개발자가 짧은 기간에 개발의 전체 상태를 이해 할 수 있도록 한다
빌드 진행을 쉽게 만든다.
일정한 빌드 환경을 제공한다.
양질의 프로젝트 정보를 제공한다.
최적의 개발을 위한 가이드라인을 제공한다.
새로운 기능을 투명하게 적용시킬 수 있다

MavenAnt의 비교
Apache Ant
Apache Maven
기존의 make와 같은 툴의 단점을 보완한
XML 기반의 빌드 툴
하나이상의 정의된 xml 파일 스크립트에 의해 동작
xml 파일에 정의된 target을 수행하고
target은 task수행
Ant와 비슷하나 프로젝트 관리를 위한 프로젝트 관리 툴
모든 프로젝트를 특정 구조와 지원되는
task work-flow들의 일련으로 간주
Pom.xml에 프로젝트 구조와 동작 정의
프로젝트의 구조와 work-flow는 정해진
컨벤션에 맞춰 동작
Ant은 생명주기(lifecycle)을 가지지 않는다.
Goal들과 Goal 의존성을 정의 해 주어야만 한다.
각각의 Goal에 대해 직접 작업의 순서를
추가해 주어야 한다
명령을 실행했을 때 호출되는 생명주기를 가진다.
Phase 마다 일련의 순차적인 생명주기
단계를 실행하도록 한다.
생명주기를 통한 과정 때문에 수많은
기본 플러그인 goal을 실행한다
Ant은 절차적이다.
Ant에게 무엇을 하고 언제 해야 할지는
정확히 알려줘야만 한다.
Maven은 선언적이다.
pom.xml 파일을 만들고 디렉터리에 소스
파일을 넣으면 알아서 처리한다
스크립트 실행 없이는 빌드를 추론하기 어렵다.
복잡한 스크립트는 부담스러운 과제가
될 수도 있음
이미 완성된 프로젝트에 적용하기 어렵다.
자율성이 떨어진다는 의견도 있다
스크립트가 재사용 가능하지 않다
재사용 가능한 플러그인, 저장소

댓글 없음:

댓글 쓰기