Java 및 Ant를 사용하여 빌드 프로세스 자동화

정의 된 프로세스는 소프트웨어 개발에서 가장 필요하지만 자주 사용되지 않는 도구 중 하나입니다. 본질적으로 개발 노력에 수반되는 오버 헤드 작업입니다. 정의 된 빌드 프로세스는 빌드가 실행될 때마다 개발 프로젝트의 소프트웨어가 정확히 동일한 방식으로 빌드되도록합니다. 빌드 프로세스가 더 복잡 해짐에 따라 (예 : EJB 빌드 또는 추가 작업) 이러한 표준화를 달성하는 것이 더 필요해집니다. 가능한 한 정확한 일련의 단계를 설정, 문서화 및 자동화해야합니다.

정의 된 빌드 프로세스가 필요한 이유는 무엇입니까?

정의 된 빌드 프로세스는 개발, 통합, 테스트 및 프로덕션 환경 간의 격차를 줄이는 데 도움이되므로 모든 개발주기에서 필수적인 부분입니다. 빌드 프로세스만으로도 한 환경에서 다른 환경으로의 소프트웨어 마이그레이션 속도가 빨라집니다. 또한 많은 프로젝트 시간과 비용이 드는 컴파일, 클래스 경로 또는 속성과 관련된 많은 문제를 제거합니다.

Ant는 무엇입니까?

Ant는 C 또는 C ++의 "make"도구와 거의 동일한 방식으로 빌드 스크립트를 구성 할 수있는 플랫폼 독립적 스크립팅 도구입니다. 사용자 정의없이 Ant에서 많은 내장 태스크를 사용할 수 있습니다. 가장 중요한 작업 중 일부는 다음 표에 나와 있지만 다음 예에서 더 자세히 설명합니다.

다음은 Ant 배포판에 빌드 된 몇 가지 유용한 명령입니다.

명령 기술
개미 현재 프로세스 내에서 다른 ant 프로세스를 실행하는 데 사용됩니다.
Copydir 전체 디렉토리를 복사하는 데 사용됩니다.
Copyfile 단일 파일을 복사하는 데 사용됩니다.
Cv CVS 저장소에서 검색된 패키지 / 모듈을 처리합니다.
지우다 지정된 디렉토리와 하위 디렉토리에서 단일 파일 또는 모든 파일을 삭제합니다.
Deltree 모든 파일 및 하위 디렉토리가있는 디렉토리를 삭제합니다.
Exec 시스템 명령을 실행합니다. os 속성이 지정되면 지정된 운영 체제 중 하나에서 Ant가 실행될 때만 명령이 실행됩니다.
가져 오기 URL에서 파일을 가져옵니다.
항아리 파일 세트를 Jars합니다.
자바 실행중인 (Ant) VM 내에서 Java 클래스를 실행하거나 지정된 경우 다른 VM을 분기합니다.
Javac 실행중인 (Ant) VM 내에서 소스 트리를 컴파일합니다.
Javadoc / Javadoc2 javadoc 도구를 사용하여 코드 문서를 생성합니다.
Mkdir 디렉토리를 만듭니다.
특성 프로젝트의 속성 (이름 및 값별) 또는 속성 집합 (파일 또는 리소스에서)을 설정합니다.
Rmic 특정 클래스에 대해 rmic 컴파일러를 실행합니다.
Tstamp 현재 프로젝트에서 DSTAMP, TSTAMP 및 TODAY 속성을 설정합니다.
스타일 XSLT를 통해 문서 세트를 처리합니다.

소프트웨어 빌드를 수행하는 데 다른 도구를 사용할 수 있지만 Ant는 사용하기 쉽고 몇 분 안에 마스터 할 수 있습니다. 또한 Ant를 사용하면 일부 클래스를 확장하여 확장 된 기능을 만들 수 있습니다. 다음 예제에서이 확장을 보여 드리겠습니다.

Ant를 사용하려면 무엇이 필요합니까?

Ant를 실행하려면 컴퓨터에 JDK, XML 파서 및 Ant의 세 가지 구성 요소를 설치해야합니다 (링크는 참고 자료 참조).

대부분의 경우 XML 구문 분석기는 Servlet 실행기 또는 웹 서버와 함께 배포되는 lib 파일의 일부입니다. 그렇지 않은 경우 java.sun.com의 무료 XML 파서로 충분합니다.

Ant 설치는 파일 다운로드, 클래스 경로에 클래스 라이브러리 추가, 경로에 Ant 바이너리 추가로 구성됩니다.

예제 시나리오

이 예제 시나리오는 Ant의 가치를 보여주고 그 이점과 사용 방법에 대한 통찰력을 제공하는 데 도움이됩니다.

현재 Java 개발의 상당 부분이 서버 측 Java에 초점을 맞추고 있기 때문에 예제로 서버 측 애플리케이션을 선택했습니다. 서버 측 Java 애플리케이션에서 작업하는 개발자는 일반적으로 서블릿 컴파일, JSP 파일 배포 및 HTML 파일, 구성 파일 또는 이미지 배포에 관심이 있습니다.

이 빌드를 수행하는 일반적인 계획에는 서버의 운영 체제를 기반으로하는 플랫폼 별 언어로 작은 스크립트를 개발하는 것이 포함됩니다. 예를 들어 NT 시스템에서 작업하는 개발자는 컴파일 작업을 수행 한 다음 배포를 실행하는 배치 파일을 만들 수 있습니다. 그러나 프로덕션 환경에 Unix 또는 Linux가있는 경우 개발자는 스크립트를 다시 작성하여 스크립트가 동기화되었는지 확인해야합니다.

좋아, 어떻게 작동하는지 보여줘

그래서 저는 여러분에게 Ant를 사용해야한다고 확신하고 설치가 얼마나 간단한 지 보여주었습니다. 이제 간단한 컴파일 및 배포를 수행하는 예제를 단계별로 살펴보면서 Ant가 얼마나 간단한 지 보여 드리겠습니다.

Ant (simple.xml)를 사용한 간단한 빌드 프로세스


  

위의 예에서 설명 할 내용이 많습니다. 먼저 simple.xml 파일의 구조를 이해해야합니다. 여러 대상 엔터티로 구성된 프로젝트 엔터티를 포함하는 올바른 형식의 XML 파일입니다.

첫 번째 줄에는 빌드 할 전체 프로젝트에 대한 정보가 포함됩니다.


  

프로젝트 라인에서 가장 중요한 요소는 defaultbasedir.

default속성은 실행될 기본 대상을 참조합니다. Ant는 명령 행 빌드 도구이므로 Ant 파일에서 대상 단계의 서브 세트 만 실행할 수 있습니다. 예를 들어 다음 명령을 수행 할 수 있습니다.

% ant -buildfile simple.xml 초기화 

그러면 ant명령 이 실행되고 init대상에 도달 할 때까지 simple.xml 파일을 통해 실행됩니다 . 따라서이 예에서 기본값은 deploy입니다. 다음 행에서 호출 된 Ant 프로세스 simple.xmldeploy명령에 도달 할 때까지 파일을 통해 실행됩니다 .

% ant -buildfile simple.xml 

basedir속성은 빌드 파일에 포함 된 상대 참조가 검색되는 기본 디렉토리이므로 상당히 자명합니다. 각 프로젝트는 하나의 basedir속성 만 가질 수 있으므로 완전한 디렉토리 위치를 포함하거나 큰 프로젝트 파일을 다른 basedir속성을 가진 작은 프로젝트 파일로 나눌 수 있습니다.

다음 관심 라인은 타겟 라인입니다. 두 가지 다른 버전이 여기에 표시됩니다.


  

target요소는 네 가지 속성을 포함 : name, if, unless,와 depends. Ant에는 name속성이 필요 하지만 다른 세 가지 속성은 선택 사항입니다.

를 사용 depends하여 Ant 태스크를 스택하여 종속 태스크가 종속 된 태스크가 완료 될 때까지 시작되지 않도록 할 수 있습니다. 위의 예에서 정리 작업은 init작업이 완료 될 때까지 시작되지 않습니다 . depends속성은 또한 토론의 작업에 따라 달라 여러 가지 작업을 나타내는 쉼표로 구분 된 값의 목록을 포함 할 수있다.

ifunless명령을 사용하면 중 하나를 수행 할 수있는 명령을 지정할 경우 특정 속성을 설정하거나 하지 않는 한 그 속성이 설정됩니다. 은 if속성 값이 설정 될 때 실행 것이며,이 unless값이 설정되지 않은 경우에 실행된다. available명령을 사용하여 다음 예제에 표시된대로 해당 속성을 설정하거나 명령 줄을 통해 설정할 수 있습니다.

init간단한 예제 의 대상에는 다음 property과 같이 네 줄의 명령이 포함되어 있습니다.


  

property행을 사용하여 일반적으로 사용되는 디렉토리 또는 파일을 지정할 수 있습니다. 속성은 디렉터리 또는 파일을 물리적 개체가 아닌 논리적 개체로 참조 할 수있는 간단한 이름 값 쌍입니다.

sourceDir나중에 Ant 파일에서 변수 를 참조하려는 경우 다음 구문을 사용하여 Ant에이 태그의 값을 가져 오도록 경고 할 수 ${sourceDir}있습니다..

위의 빌드 파일에있는 두 가지 다른 명령은 다음과 같습니다.


  

이러한 명령은 outputDir(또는 classes위에서 언급 한대로 역 참조 된 경우 디렉토리) 에 불필요한 파일이 없는지 확인하는 데 사용됩니다 . 첫 번째 명령은 아래에 포함 된 전체 트리를 제거합니다 outputDir. 두 번째 명령은 디렉터리를 다시 만듭니다.

개발자의 주요 관심 사항은 다음과 같은 컴파일 라인입니다.


  

javac명령은 소스 디렉토리 (된 .java 파일의 입력 위치)와 대상 디렉토리 (.classes 파일의 출력 위치)가 필요합니다. 모든 디렉토리는 ant명령을 실행하기 전에 존재 하거나 mkdir명령을 사용하여 생성되어야합니다 . Ant는 직관을 기반으로 디렉토리를 생성하지 않으므로 위의 컴파일 단계 이전에 명령을 outputDir사용 하여을 생성해야합니다 mkdir.

compile작업이 완료된 후 작업은 deploy복사 작업을 수행하여 모든 JSP 파일을 소스 디렉터리에서 배포 디렉터리로 이동합니다. copydir명령 을 사용하여 전체 JSP 디렉토리를 한 위치에서 다른 위치로 복사합니다. copyfile명령을 사용 하여 빌드의 일부로 단일 속성 파일을 복사했습니다.

예제를 설명하는 데 몇 줄이 걸렸지 만 Ant가 사용하기 쉬운 도구라는 것은 분명합니다. 이 빌드 파일을 시작점으로 사용하면 Ant를 개발 작업에 통합 할 수 있습니다. ant위의 예에 표시된 명령은 나머지 문서에 대한 참조와 함께 당신에게 남아, 그 중 일부는이 문서에서 논의 될 것이다, 추가 기능을 가지고있다.

중요한 작업

Ant 배포판에 포함 된 기본 제공 작업을 읽어 보는 것은 사용자의 책임입니다. 각 명령에 대한 정보는 참고 자료의 사용자 안내서를 참조하십시오. 사용자 지정없이 빌드 관리자에서 사용할 수있는 추가 옵션의 예로 일반적으로 사용되는 두 가지 명령을 선택했습니다.

코드 컴파일 (EJB 포함)

앞에서 설명한 간단한 예제에서 간단한 javac명령 형식을 보았습니다 . 이제 더 자세히 살펴보면 deprecation, debug 또는 optimize와 같은 컴파일 플래그와 컴파일에 포함되거나 포함되지 않을 파일을 지정할 수 있음을 알 수 있습니다.


  

태스크 include/exclude내의 엔티티 를 사용 하여 컴파일 javac에서 name속성 의 패턴과 일치하는 파일을 포함 / 제외 할 수 있습니다 . 위의 예에서 .java로 끝나는 디렉토리에 포함 된 파일을 포함하려고하지만 동시에 속성 bsf.present이 true로 설정 되지 않은 경우 Script.java라는 파일을 제외하려고 합니다.

bsf.present지정된 클래스 이름에 대한 클래스 경로를 bsf.present검색하고 검색 결과에 따라 설정하는 다음 작업을 사용 하여 속성을 설정합니다 .


  

javac명령은 위의 제외 명령을 기반으로 한 컴파일에서 version.txt라는 파일을 포함하지 않습니다.

javadoc 생성

Ant가 자동화 할 수있는 또 다른 작업은 javadoc의 생성입니다. 다음 명령을 사용하여 javadoc을 생성 할 수 있습니다.


  

패키지는 javadoc이 포함 할 전체 패키지를 지정합니다. sourcepath속성은 원본 파일의 위치를 향해 가리 킵니다. 이 javadoc명령은 또한 창과 문서의 제목을 지정할 수있는 속성을 제공합니다. bottom속성을 사용하여 각 javadoc 페이지의 맨 아래에 저작권 고지를 포함 할 수도 있습니다 .

Ant는 XYZ를 할 수 있습니까?

이 시점에서 Ant가 자동화 할 수있는 빌드 프로세스에서 가능한 작업 중 일부를 확인했습니다. 이러한 작업은 Ant에 기본적으로 포함되어 있습니다. Ant를 사용자 정의하여 EJB 빌드 및 원격 구성 관리 수행과 같은 좀 더 어려운 작업을 수행 할 수 있습니다. 여러분 중 일부는 Ant의보고 기능을 높이거나 Ant 프로세스를 실행할 수있는 사용자 인터페이스를 구성하고자 할 수 있습니다.

"Ant는 XYZ를 할 수 있습니까?"라는 질문에 대한 간단한 대답입니다. "예,하지만 사용자 정의해야 할 수도 있습니다."입니다.

Ant 확장

이 시점에서 두 가지 Ant 확장을 논의하는 것이 흥미 롭습니다. 보고 기능이 향상되고 Ant를 사용하여 원격으로 코드를 배포 할 수 있습니다.

보고 기능 향상