compile.with를 통해 컴파일에 필요한 의존 라이브러리(artifacts)를 지정하면 buildr은 컴파일 작업시 해당 라이브러리를 리모트 Maven 저장소로부터 다운로드 받습니다(이미 로컬 Maven 저장소에 있는 경우는 제외).

compile.with 'org.apache.axis2:axis2:jar:1.2'

하지만 buildfile 스크립트 내에서 임의로 우리가 라이브러리를 다운로드 받을 수도 있습니다.

아, 그보다 먼저 리모트 메이븐 저장소 주소를 buildr에 알려주어야 합니다. 2가지 방법이 있습니다.

1. 사용자홈/.buildr/settings.yaml 파일에 메이븐 저장소 주소 세팅

2. 빌드스크립트(buildfile)에서 세팅

#repositories.remote << 'http://www.ibiblio.org/maven2/' << 'http://download.java.net/maven/2/'
repositories.remote.push %w{ http://www.ibiblio.org/maven2/  http://download.java.net/maven/2/ }

다시 돌아와서, buildfile 스크립트 내에서 임의로 라이브러리를 다운로드받을 수 있습니다.

한 개 다운로드 : artifact(스펙).invoke
여러 개 다운로드 : artifacts(스펙목록).each(&:invoke)

예를 들어 findbugs.jar 와 findbugs-ant.jar를 다운 받고자 한다면 이런식으로 작성합니다.

FINDBUGS = ["net.sourceforge.findbugs:findbugs:jar:1.3.2",
                    "net.sourceforge.findbugs:findbugs-ant:jar:1.3.2"]
artifacts(FINDBUGS).each(&:invoke)

Buildr::group 메소드를 써서 FINDBUGS를 다르게 표현할 수도 있습니다.

FINDBUGS = Buildr::group %w{findbugs findbugs-ant},
                                     :under=>'net.sourceforge.findbugs',
                                     :version=> '1.3.2'

Maven은 transitive dependencies(의존성 전이)라고 해서 한다리 건너의 의존 라이브러리까지도 알아서 가져오는 기능을 제공합니다. Buildr도 아직 완벽하지는 않지만 의존성 전이를 지원합니다. 바로 transitive 메소드가 있습니다.

주어진 스펙이 의존하는 라이브러리까지 몽창 다운로드 : transitive(스펙목록).each(&:invoke)

예를 들어 findbugs-antfindbugs에 의존하고 다시 findbugs는 asm,bcel,dom4j 등에 의존합니다.(pom파일의 내용은 링크에서 확인가능합니다) 따라서 transitive 메소드를 이용하여 findbugs-ant를 다운로드 받으면 findbugs와 그것이 의존하는 asm 등도 함께 다운로드됩니다.

transitive('net.sourceforge.findbugs:findbugs-ant:jar:1.3.2').each(&:invoke)


transitive는 compile.with에도 사용 가능합니다. 아래처럼 설정하면 acegi-security가 의존하는 스프링프레임워크 모듈들도 컴파일 작업시 함께 다운로드될 것입니다.

compile.with transitive('org.acegisecurity:acegi-security:jar:1.0.5')

만약 내가 원하는 라이브러리가 메이븐 형식의 저장소에 없지만 웹사이트 어딘가에서 받을 수 있다면 download 메소드를 이용하여 다운로드 받을 url 주소를 직접 지정하여 파일을 다운로드 받을 수 있습니다.

보통 웹사이트에서 다운받기 : download(artifact(스펙))=>파일주소).invoke

아래 예제는 dojo:dojo:zip:widget:0.2.2 형식의 아티팩트를 메이븐저장소가 아니라 주어진 url로부터 다운로드받아 로컬 메이븐 저장소에 설치합니다(M2_REPO/dojo/dojo/0.2.2/dojo-0.2.2-widget.zip).

url = 'http://download.dojotoolkit.org/release-0.2.2/dojo-0.2.2-widget.zip'
download(artifact("dojo:dojo:zip:widget:0.2.2")=>url).invoke

'Build&Deploy > Buildr' 카테고리의 다른 글

Buildr : 코드분석 리포트 생성  (0) 2008.12.23
Buildr : 빌드결과 패키징  (0) 2008.12.18
Buildr : 타스크 의존 관계  (0) 2008.12.11
Buildr : 리소스 교체  (3) 2008.12.09
Buildr : 리소스 필터링  (0) 2008.12.09
Posted by 에코지오
,