1. 도구개요 소개 주요기능 자바프로그래밍언어에서사용하는자동화된소프트웨어빌드도구유닉스나리눅스에서사용되는 make와비슷하나자바언어로구현되어있어자바실행환경이필요하며자바프로젝트들을빌드하는데표준으로사용패키지빌드자동화 카테고리 세부카테고리빌드 커버리지 Package Build Automation 도구난이도하 라이선스형태 / 비용 BSD License (Berkeley Software Distribution) / 무료 사전설치도구 JDK 1.5이상 Eclipse( 본매뉴얼에서사용핚도구 ) 운영체제 Windows, Linux, Mac OS, UNIX 최신버전 1.8.4 (2012. 10) 특징 Build 자동화 ( 컴파일, Javadoc 생성, 실행, FTP SCP, SFTP 연결, CVS 연동, 다른공학도구와의연동 ) 배포 유닛테스트 (JUnit 활용, HTML 등테스트결과보고서작성 ) 적용회사 / 프로젝트관련도구제작사공식홈페이지 JAVA를기반으로진행되는프로젝트, 대부분의자바 IDE에기본적용 Eclipse, NetBeans, Hudson, PMD등 Apache Software Foundation http://ant.apache.org/ 1
2. 기능요약 자바프로그래밍언어에서사용하는자동화된소프트웨어빌드도구 주요기능 IDE 통합및도구지원 원격코드 Build 자동화 지원여부 대부분의도구지원 (Eclipse, NetBeans 등 ) 지원 (FTP, SCP, SFTP, SVN) 자동화 Build 중 Unit Test 수행 지원 (JUnit) 테스트수행결과보고서 지원 (HTML) JAVA Doc 생성 지원 공학도구연계지원 (Hudson, PMD, Maven 등 ) Build 후배포 지원 1
3. 도구실행환경 JAVA 를지원하는 IDE 상에서설치및구현이가능 다양한 OS 를지원 Windows : Windows XP / Windows 7 (32, 64-bit 모두지원 ) Linux : 32, 64-bit 지원 Mac OS X : 32, 64-bit 지원 UNIX : 32, 64-bit 지원 JDK, 자바기반도구 (IDE 등 ) 이필요 코드및플러그인형태, 도구에포함되어있는형태로제공 Java IDE (Eclipse, NetBeans 등 ) JDK (Java development kit) Windows / Linux / Mac OS / UNIX 1
4. 도구설치방법 세부목차 4.1 다운받기 4.2 설정하기 4.3 Eclipse 에서 설치여부확인하기 1
4. 도구설치방법 4.1 다운받기 (1/2) 대부분의 JAVA IDE 는 를포함하고있으나, Eclipse 외부나업데이트시설치 http://ant.apache.org/ 에접속 Binary Distributions 2
4. 도구설치방법 4.1 다운받기 (2/2) 각운영체제에맞는패키지다운로드 Eclipse Windows 용은 zip 파일을다운 3
4. 도구설치방법 4.2 설정하기 (1/2) 압축해제및환경변수설정 압축해제 ANT_HOME 환경변수추가 4
4. 도구설치방법 4.2 설정하기 (2/2) 압축해제및환경변수설정 Path 에 경로추가 5
4. 도구설치방법 4.3 Eclipse 에서 설치여부확인하기 메뉴의 Windows Show View 를클릭 윈도우가생성됨을확인 6
5. 도구기능소개 세부목차 5.1 의개요 5.2 프로젝트에서 Build파일생성 5.3 Build.xml의구조 5.4 Eclipse Build 하기 5.5 Hudson과의연계 1
5. 도구기능소개 5.1 의개요 Apache 는빌드도구소프트웨어 GNU make 의 Java 버젂 운영체제 (OS) 등특정환경에의존하지않는빌드도구 XML 문서빌드 ( 소프트웨어구축 ) 의규칙을작성하는것이특징 통합개발환경 Eclipse 는 플러그인이기본으로내장 원래 Apache Tomcat 을빌드하기위해개발된것 태스크기반의 XML 요소를빌드파일에작성하여빌드규칙을생성 기본적으로 build.xml 형태로존재 플러그인으로제공되고있는것을외부에서채용하는것으로, 추가가능 의응용프로그래밍인터페이스 (API) 에따라 Java 로작성하여직접작성및수정가능 최근 Java 뿐만아니라 IKVM.NET 프로젝트및 Mono ( 소프트웨어 ) 프로젝트에서 task for IKVMC 로.NET Framework 에서의이용촉짂중 2
5. 도구기능소개 5.2 프로젝트에서 Build 파일생성 (1/4) 프로젝트우클릭 Export 클릭 3
5. 도구기능소개 5.2 프로젝트에서 Build 파일생성 (2/4) JAVA Buildfiles 선택 Next 4
5. 도구기능소개 5.2 프로젝트에서 Build 파일생성 (3/4) 프로젝트를선택 Finish 5
5. 도구기능소개 5.2 프로젝트에서 Build 파일생성 (4/4) Build 파일생성결과 Build.xml 파일이생성된것을확인할수있음 6
5. 도구기능소개 5.3 Build.xml 의구조 (1/7) 의 Build.xml 파일 : Project 요소, Target 요소, Task 요소를포함 Eclipse 에서생성한기본 build.xml 파일 7
5. 도구기능소개 5.3 Build.xml 의구조 (2/7) 타깃간의의존관계는 target 요소의 depends 속성으로기술 그림예시 : dist 타깃은 compile 타깃에의존 compile dist clean 순으로동작 일반적인 의명령어 property : 속성을지정 mkdir : 새로운디렉토리생성 copy : 파일, 디렉토리복사 javac : 컴파일 jar : jar 파일생성 javadoc : javadoc 생성 delete : 파일, 디렉토리삭제 Java : Java 프로그램을실행 Junit : 테스트프레임워크 JUnit 을사용하여 Java 프로그램을테스트 Jnitreport : junit 작업출력결과파일을사용하여 HTML 형식등에대응하는보고서를생성 ftp : FTP 연결을시작하고파일업로드, 다운로드등을가능하게함 zip : 지정된디렉토리와파일을 ZIP 형식으로압축 보관 echo : 콘솔 ( 명령라인환경 ) 에문자열출력 splash : 런타임에지정된시간동안시작표시 buildnumber : 빌드번호를업데이트 8
5. 도구기능소개 5.3 Build.xml 의구조 (3/7) property : 속성을지정 속성에서는대소문자를구별 foo.src 라는이름의속성으로 "src" 를지정시 <property name="foo.src" value="src" /> 빌드스크립트의다른부분에서이속성을참조하려면 "${foo.src}" 와같이기록 <javac srcdir="${foo.src}" destdir="${build}" /> 파일을읽어속성을설정 <javac file="foo.properties" /> mkdir : 새로운디렉토리생성 디렉토리생성예시 <mkdir dir="${dist}" /> <mkdir dir="${dist}/lib" /> 9
5. 도구기능소개 5.3 Build.xml 의구조 (4/7) copy : 파일, 디렉토리복사 파일하나복사예시 <copy file="myfile.txt" tofile="mycopy.txt" / > 디렉토리에서다른디렉토리복사예시 <copy todir="../new/dir > <fileset dir="src_dir > </copy> 특정디렉토리의원하는파일만지정하여복사 : *.java 파일을제외한나머지파일복사예시 exclude 는특정내용을제외하는키워드이고 ** 의경우 src_dir 디렉토리아래모든디렉토리를재귀적으로탐색 <copy todir="../dest/dir > <fileset dir="src_dir > <exclude name="**/*.java" /> </fileset> </copy> 10
5. 도구기능소개 5.3 Build.xml 의구조 (5/7) javac : JAVA 소스파일의컴파일 재귀적으로탐색하여, class 파일이없거나 class 파일이 java 파일보다오래된경우에만컴파일 ${src} 와그하위디렉토리에있는모든 java 파일을컴파일예시 결과를 ${build} 디렉토리에저장, 클래스패스에는 xyz.jar 가포함되고, 디버깅옵션을켜고컴파일 <javac srcdir="${src}" destdir="${build}" classpath="xyz.jar" debug="on" /> ${src} 와 ${src2} 및그하위디렉토리에있는 java 파일을컴파일 : 결과를 ${build} 디렉토리에저장 mypackage/p1 과 mypackage/p2 에있는파일만을사용하고, 클래스패스에 xyz.jar 가포함 여기서 include 가특정내용을포함하는키워드입니다 <javac srcdir="${src}:${src2}" destdir="${build} include="mypackage/p1/**,mypackage/p2/** exclude="mypackage/p1/testpackage/**" classpath="xyz.jar' debug="on" /> 11
5. 도구기능소개 5.3 Build.xml 의구조 (6/7) jar : 지정된파일들을 jar 로묶습니다. ${build}/classes 밑에있는파일을 app.jar 로묶기 <jar destfile="${dist}/lib/app.jar" basedir="${build}/classes" /> mypackage/text 밑에있는파일만을묶고 Test.class 는제외 <jar destfile="${dist}/lib/app.jar" basedir="{build}/classes" include="mypackage/test/**" exclude="**/test.class" /> ${build}/classes 와 ${src}/resources 밑에있는파일을 app.jar 로묶되, Test.class 는제외 <jar destfile="${dist}/lib/app.jar > <fileset dir="${build}/classes" exclude="**/test.class" /> <fileset dir="${src}/resources" /> </jar> javadoc : javadoc 문서를생성, src 디렉토리밑에있는소스파일을읽어 javadoc 문서를생성하여 ${doc} 디렉토리에저장 <javadoc destdir="${doc} > <fileset dir="${src} > </fileset> </javadoc> 12
5. 도구기능소개 5.3 Build.xml 의구조 (7/7) delete : 하나의파일또는디렉토리와그하위디렉토리, fileset 에지정된파일을삭제 /lib/ant.jar 파일을삭제 <delete file="/lib/ant.jar" /> lib 디렉토리와그하위디렉토리를삭제 <delete dir="/lib" /> 현재디렉토리와그하위디렉토리에서확장자가 bak 인모든파일을삭제 <delete> <fileset dir="." include="**/*.bak" /> </delete> build 디렉토리와그하위디렉토리를삭제합니다. includeemptydirs 를 "true" 로설정하면 fileset 을사용할때빈디렉토리도포함 <delete includeemptydirs="true > <fileset dir="build" /> </delete> 13
5. 도구기능소개 5.4 Eclipse Build 하기 (1/2) Add Buildfile Finish 클릭 Eclipse 내부에서생성된 파일읽기 14
5. 도구기능소개 5.4 Eclipse Build 하기 (2/2) Eclipse 의 Build 결과 프로젝트트리탐색기의 Build 할부분을선택 Run the selected target 버튺 / 더블클릭 15
5. 도구기능소개 5.5 Hudson 과의연계 (1/3) Hudson 프로젝트생성 새작업 작업명입력 OK 16
5. 도구기능소개 5.5 Hudson 과의연계 (2/3) 설정 : Build Add Build step Invoke Build Triggers 에서빌드시점지정가능 17
5. 도구기능소개 5.5 Hudson 과의연계 (3/3) Build 수행 Build now 를눌러실행하거나, 설정된 Build plan 에따라 Build 수행 18
6. 도구활용예제 세부목차 6.1 예제소개 6.2 build.xml생성 6.3 Eclipse내부에서 사용하기 6.4 Hudson설정및연계 1
6. 도구활용예제 6.1 예제소개 (1/2) 예제시스템 : A업체의 적용 A업체의상황및개선예정사항 A업체는자바기반의객체지향프로그래밍을위해 Eclipse 를사용 A업체는빈번한코드변경이일어나지만, Build 와 Compile 및 Test 가자동화되지않아잦은배포문제를겪음 A업체는 와 Hudson 을사용하여자동생성체계를갖춤 2
6. 도구활용예제 6.1 예제소개 (2/2) A 업체의몇가지이슈사항 소스코드의변경이자주일어남 잦은변경으로인한테스트와배포과정의자동화가필요 공개측정도구인 를도입, 프로그램을효율적으로측정, 관리하기로결정 도입효과 - Build부터 Test, 배포까지자동화 - 자동화된체계로인한노력절감 - 정해진 Build로인한최신화유지 3
6. 도구활용예제 6.2 build.xml 생성 (1/4) 프로젝트우클릭 Export 클릭 Build.xml 파일을추출하는과정 4
6. 도구활용예제 6.2 build.xml 생성 (2/4) JAVA Buildfiles 선택 Next 5
6. 도구활용예제 6.2 build.xml 생성 (3/4) 프로젝트를선택 Finish 6
6. 도구활용예제 6.2 build.xml 생성 (4/4) 생성된 Build 파일을수정 생성된 Build 파일을자동화 Build 목표에맞게수정 7
6. 도구활용예제 6.3 Eclipse 내부에서 사용하기 (1/2) Add Buildfile Finish 클릭 Eclipse 내부에서생성된 파일읽기 8
6. 도구활용예제 6.3 Eclipse 내부에서 사용하기 (2/2) Eclipse 의 Build 결과 프로젝트트리탐색기의 Build 할부분을선택 Run the selected target 버튼 / 더블클릭 9
6. 도구활용예제 6.4 Hudson 설정및연계 Hudson 에서 Build 설정및 Build 결과 10
7. FAQ 질문 1) 의약자는무엇인가요? 단순히개미에서따온것인가요? 답변 1 : 는 Another Neat Tool 의약어입니다. 질문 2) 가개발된동기나배경은어떠합니까? 답변 1 : JSP/Servlet 표준구현엔진 (Tomcat 으로발전되기전 ) 을오픈소스화하던중 make 를이용하여작업하였으나, 다른환경에서는이를수행할수있는오픈소스소프트웨어가없었기때문에개발하게되었습니다. 그리하여 Tomcat 을빌드하기위한툴에서현재의모습으로발전하게되었습니다. 1
8. 도구평가 활용성 빌드자동화도구중에최고의활용성 범용성 대부분의자바 IDE 도구에기본채택 호환성 JAVA 환경에서완벽하게작동, ( 버전별최소요구자바버전이존재, 1.5 이상에서모두가능 ) 성능 빌드수행능력에있어서일반적인 Build성능과별다른차이가없다, 오히려자동화로효율적 기타 다른관리도구와연계지원 도구평가의견 는 Eclipse 에서기본탑재되어있으며, 자동화빌드를지원 자체 JUnit 테스트기능을지원 XML을수정하여원하는형태의 Build 를자동화할수있으며, 명령어를통해폴더생성및테스트까지완벽하게지원 1
9. 용어정리 본매뉴얼에서사용하고있는용어의정리 JUnit 단위테스트 Java 기반테스팅을위한프레임워크로, 단위모듈 (ex: Method) 이정확히구 현되었는지를확인할수있는도구 단위테스트는단위코드에서문제발생소지가있는모든부분을테스트하는작업 빌드자동화 개발자가개발한소프트웨어의개발과정중 Build 과정을자동화한것. Build 시점을정할수있으며, 시점에는트리거발생시, 업데이트시, 일단 위 (Daily Build) 등이존재 1