Java Ant 학습

1.ant 핵심 요소
1.프로젝트 요소
    procject 요 소 는 Ant 구성 요소 파일 의 루트 요소 입 니 다.Ant 구성 요소 파일 은 최소한 하나의 procject 요 소 를 포함 해 야 합 니 다.그렇지 않 으 면 오류 가 발생 할 수 있 습 니 다.모든 procject 요소 에 여러 target 요 소 를 포함 할 수 있 습 니 다.다음은 프로젝트 요소 의 각 속성 을 독자 에 게 보 여 줍 니 다.
1)name 속성
    프로젝트 요소 의 이름 을 지정 하 는 데 사용 합 니 다.
2)기본 속성
    프로젝트 가 기본적으로 실 행 될 때 실행 할 target 의 이름 을 지정 합 니 다.
3)basedir 속성
    기본 경 로 를 지정 하 는 위치 입 니 다.이 속성 이 지정 되 지 않 았 을 때 Ant 의 구성 요소 파일 의 첨부 디 렉 터 리 를 기준 디 렉 터 리 로 사용 합 니 다.
<?xml version="1.0" ?> 
<project name ="antPro" default ="getBaseDir" basedir ="C:/ThinkInJavaCode"> 
        <target  name="getBaseDir"> 
               <echo message="The base dir is: ${basedir}"/> 
        </target> 
</project> 

위의 예 에서 알 수 있 듯 이 default 속성의 값 을 getBaseDir 로 정의 합 니 다.즉,ant 명령 을 실행 할 때 실행 할 target 을 가리 키 지 않 으 면 기본 target-getBaseDir 를 실행 합 니 다.또한 basedir 속성의 값 을'C:/ThinkInJavaCode'로 정의 하여'C:/ThinkInJavaCode'에 들 어간 후 ant 명령 을 실행 하여 결 과 를 얻 었 습 니 다.
Buildfile: C:\ThinkInJavaCode\build.xml 
  
sayBaseDir: 
     [echo] The base dir is: C:\ThinkInJavaCode 
  
BUILD SUCCESSFUL 
Total time: 0 seconds 

 
2.target 요소
   target 은 Ant 의 기본 실행 단위 로 하나 이상 의 구체 적 인 작업 을 포함 할 수 있 습 니 다.여러 target 은 상호 의존 관 계 를 가 질 수 있 습 니 다.다음 속성 이 있 습 니 다:
1)name 속성
    target 요소 의 이름 을 지정 합 니 다.이 속성 은 procject 요소 에서 유일 합 니 다.우 리 는 target 요소 의 이름 을 지정 해서 target 을 지정 할 수 있 습 니 다.
2)depends 속성
    target 간 의 의존 관 계 를 설명 하 는 데 사 용 됩 니 다.여러 target 과 의존 관계 가 있 을 때","간격 이 필요 합 니 다.Ant 는 depends 속성 에서 target 이 나타 나 는 순서에 따라 각각 target 을 순서대로 실행 합 니 다.의존 하 는 target 이 먼저 실 행 됩 니 다.
3)if 속성
    지정 한 속성 이 존재 하 는 지 검증 하 는 데 사 용 됩 니 다.존재 하지 않 으 면 target 은 실행 되 지 않 습 니 다.
4)unless 속성
    이 속성의 기능 은 if 속성의 기능 과 정반 대 입 니 다.지정 한 속성 이 존재 하 는 지 검증 하 는 데 도 사 용 됩 니 다.존재 하지 않 으 면 대상 이 실 행 됩 니 다.
5)description 속성
    이 속성 은 target 기능 에 대한 간단 한 설명 과 설명 입 니 다.
    예 를 들 어 다음 과 같이 설명 한다.
<?xml version="1.0" ?>  
<project name ="targetPro" default="targetB">  
<target name="targetA" if ="ant.java.version">  
        <echo message ="Java Version: ${ant.java.version}"/>  
    </target>  
    <target name="targetB"  depends ="targetA" unless ="philander">  
        <description>  
            a depend example!  
        </description>  
        <echo message ="The base dir is: ${basedir}"/>  
    </target>  
</project> 

다음 결 과 를 보면 target B 라 는 target 을 실행 합 니 다.target A 에 의존 하기 때문에 target A 가 먼저 실 행 됩 니 다.또한 시스템 에 JDK 가 설정 되 어 있 기 때문에 ant.java.version 속성 이 존재 합 니 다.target A 를 실 행 했 습 니 다.출력 정 보 는"[echo]Java 버 전:1.6"입 니 다.target A 가 실 행 된 후에 target B 를 실행 합 니 다.필 랜 더 가 존재 하지 않 기 때문에 unless 속성 은 존재 하지 않 을 때 대상 에 들 어 갑 니 다.이 를 통 해 target B 가 실 행 될 수 있 습 니 다.출력 정 보 는"[echo]The base dir is:C:\ThinkInJavaCode"입 니 다.
Buildfile: C:\ThinkInJavaCode\build.xml 
  
targetA: 
     [echo] Java Version: 1.6 
  
targetB: 
     [echo] The base dir is: C:\ThinkInJavaCode 
  
BUILD SUCCESSFUL 
Total time: 0 seconds 

 
3.property 요소
    property 요 소 는 파 라 메 트릭 이나 매개 변수의 정의 로 볼 수 있 습 니 다.procject 의 속성 은 property 요 소 를 통 해 설정 할 수도 있 고 Ant 밖에서 설정 할 수도 있 습 니 다.build.properties 파일 과 같은 외부 파일 을 도입 하려 면 다음 과 같은 내용 을 통 해 도입 할 수 있 습 니 다.
<property file=” build.properties”/> 

property 요 소 는 task 의 속성 값 으로 사용 할 수 있 습 니 다.task 에 서 는 속성 명 을"${"와"}"사이 에 두 고 task 속성 값 의 위치 에 두 는 것 을 통 해 이 루어 집 니 다.
    Ant 는 내 장 된 속성 을 제공 합 니 다.시스템 속성 목록 은 자바 문서 에서 System.getPropertis()방법 으로 얻 은 속성 과 일치 합 니 다.이러한 시스템 속성 은 sun 사이트 의 설명 을 참고 할 수 있 습 니 다.이 동시에 Ant 는 자신의 내장 속성 도 제공 했다.다음 과 같다.
    basedir:procject 기본 디 렉 터 리 의 절대 경로;   
    ant.file:buildfile 의 절대 경로 입 니 다.위의 ant.file 값 은 C:\ThinkInJavaCode\build.xml 입 니 다.
    ant.version:Ant 의 버 전 정보,본 고 는 1.8.1 이다.
    ant.project.name:현재 지정 한 procject 의 이름,즉 앞에서 말 한 procject 의 name 속성 값 입 니 다. 
    ant.java.version:Ant 에서 검출 된 JDK 버 전 입 니 다.본 고 는 1.6 입 니 다.
    예 를 들 어 다음 과 같이 설명 한다.
<? xml version="1.0" ?> 
<project  name ="propertyPro"  default ="example"> 
    <property  name ="name"  value ="philander"/> 
    <property  name ="age"  value ="25"/> 
    <target  name ="example"> 
         <echo  message ="name: ${name}, age: ${age}"/> 
    </target> 
</project> 

위의 예 에서 사용 자 는 name 과 age 라 는 두 개의 속성 을 설정 하 였 습 니 다.이 두 개의 속성 을 설정 한 후 다음 글 에서${name}과${age}을 통 해 각각 이 두 개의 속성 값 을 얻 을 수 있 습 니 다.
2.ANT 상용 명령
1.copy 명령
    copy 는 주로 파일 과 디 렉 터 리 를 복사 하 는 데 사 용 됩 니 다.예 를 들 면 다음 과 같다.
eg1.단일 파일 복사:
<copy file="original.txt" tofile="copied.txt"/> 

eg2.파일 디 렉 터 리 복사:
<copy todir="../dest_dir"> 
      <fileset dir="src_dir"/> 
 </copy> 

eg3.다른 디 렉 터 리 로 파일 복사 하기:
<copy file="source.txt" todir="../home/philander"/> 

2.delete 명령
    파일 이나 디 렉 터 리 를 삭제 합 니 다.예 를 들 어 다음 과 같 습 니 다.
eg1.어떤 파일 을 삭제 합 니 다:
<delete file="/home/photos/philander.jpg"/> 

eg2.디 렉 터 리 삭제:
<delete dir="/home/photos"/> 

eg3.모든 백업 디 렉 터 리 나 빈 디 렉 터 리 삭제:
<delete includeEmptyDirs="true"> 
       <fileset dir="." includes="**/*.bak"/> 
</delete> 

3.mkdir 명령
    디 렉 터 리 를 만 듭 니 다.eg :
<mkdir dir="/home/philander/build/classes"/> 

4.이동 명령
    파일 이나 디 렉 터 리 를 이동 합 니 다.예 를 들 어 다음 과 같 습 니 다.
eg1.단일 파일 이동:
<move file="sourcefile" tofile=”destfile”/> 

eg2.하나의 파일 을 다른 디 렉 터 리 로 이동:
<move file="sourcefile" todir=”movedir”/> 

eg3.다른 디 렉 터 리 로 디 렉 터 리 이동:
<move todir="newdir"> <fileset dir="olddir"/></move>


5.echo 명령
    이 작업 의 역할 은 로그 나 모니터 의 단계 에 따라 정 보 를 출력 하 는 것 입 니 다.메시지,file,append,level 네 가지 속성 을 포함 합 니 다.예 를 들 어 다음 과 같 습 니 다.
<echo message="Hello,ANT" file="/home/philander/logs/ant.log" append="true"> 

3.ant 를 이용 하여 자바 프로젝트 구축 및 배치
    Ant 는 자바 c,자바,jar 등 명령 을 사용 하여 자바 작업 을 수행 하여 자바 프로젝트 를 쉽게 구축 하고 배치 하 는 목적 을 달성 할 수 있 습 니 다.
1.ant 의 자바 c 명령 을 이용 하여 자바 프로그램 을 컴 파일 합 니 다.
    Ant 의 javac 명령 은 자바 프로그램 을 컴 파일 하 는 기능 을 실현 하 는 데 사 용 됩 니 다.다음은 간단 한 예 를 들 어 자바 Test Pro 라 는 자바 프로젝트 를 만 들 고 src 디 렉 터 리 를 소스 코드 디 렉 터 리 로 만 들 며 src 디 렉 터 리 에 Hello World.java 라 는 파일 을 만 듭 니 다.이 파일 의 내용 은 다음 과 같 습 니 다.
public class HelloWorld { 
     public static void main(String[] args) { 
    System.out.println("hello world!"); 
     } 
} 

자바 TestPro 프로젝트 의 루트 디 렉 터 리 에 build.xml 파일 을 만 듭 니 다.이 파일 에서 sr 디 렉 터 리 에 있 는 자바 파일 을 컴 파일 하고 컴 파일 된 class 파일 을 build/classes 디 렉 터 리 에 넣 습 니 다.전체 프로젝트 의 디 렉 터 리 구 조 는 다음 과 같 습 니 다.
|JavaTestPro
      |src
      |build
            |classes
      |build.xml
     컴 파일 하기 전에 classes 디 렉 터 리 를 지 워 야 합 니 다.이 파일 의 내용 은 다음 과 같 습 니 다.
<?xml version="1.0" ?> 
  
<project name ="javacTest" default="compile" basedir="."> 
    <target name="clean"> 
        <delete dir="${basedir}/build"/> 
    </target> 
    <target name="compile"  depends ="clean"> 
        <mkdir dir ="${basedir}/build/classes"/> 
        <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/> 
    </target> 
</project> 

프로젝트 루트 디 렉 터 리(C:\ThinkInJavaCode\JavaTestPro)에서 ant 명령 을 실행 하면 이 디 렉 터 리 에서 새로 생 성 된 build/classes 하위 디 렉 터 리 를 발견 할 수 있 습 니 다.컴 파일 된 Hello World.class 파일 은 이 디 렉 터 리 에 있 습 니 다.
2.자바 명령 으로 자바 프로그램 실행
    Ant 에 서 는 자바 명령 을 사용 하여 자바 프로그램 을 실행 하 는 기능 을 수행 할 수 있 습 니 다.위의 build.xml 를 바탕 으로 수정 할 수 있 습 니 다.
<?xml version="1.0" ?> 
<project name ="javacTest" default="run" basedir="."> 
    <target name="clean"> 
        <delete dir="${basedir}/build"/> 
    </target> 
    <target name="compile"  depends ="clean"> 
        <mkdir dir ="${basedir}/build/classes"/> 
        <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/> 
    </target> 
     <target name="run"  depends ="compile"> 
        <java classname ="HelloWorld"> 
            <classpath> 
               <pathelement path="${basedir}/build/classes"/> 
            </classpath> 
        </java> 
    </target> 
</project> 

 
이 어 콘 솔 에서 출력 을 볼 수 있다."[java]hello world!"
3.jar 명령 으로 jar 파일 생 성
    또한 상기 사례 를 바탕 으로 한 걸음 더 나 아가 jar 패 키 지 를 생 성 할 수 있 습 니 다.run 이라는 target 에 다음 과 같은 target 을 추가 할 수 있 습 니 다.
<?xml version="1.0" ?> 
<project name ="javacTest" default="jar" basedir="."> 
    <target name="clean"> 
        <delete dir="${basedir}/build"/> 
    </target> 
    <target name="compile"  depends ="clean"> 
        <mkdir dir ="${basedir}/build/classes"/> 
        <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/> 
    </target> 
    <target name="run"  depends="compile"> 
          <java classname ="HelloWorld"> 
    <classpath> 
                    <pathelement path="${basedir}/build/classes"/> 
                 </classpath> 
           </java> 
    </target> 
    <target name="jar" depends="run"> 
           <jar destfile="helloworld.jar" basedir="${basedir}/build/classes"> 
                <manifest> 
        <attribute name="Main-class" value="HelloWorld"/> 
                </manifest> 
            </jar> 
    </target > 
</project> 

이 가운데 procject 의 default 속성 은 jar 로 설정 되 어 있 으 며,ant 가 실 행 된 후 프로젝트 의 루트 디 렉 터 리 아래 helloworld.jar 의 jar 패 키 지 를 생 성 하 는 것 을 볼 수 있 습 니 다.다음 명령 을 실행 하여 이 jar 패 키 지 를 실행 할 수 있 습 니 다:
?
1 java -jar helloworld.jar
4.war 명령 으로 자바 프로젝트 포장 하기
    src 는 자바 소스 코드 디 렉 터 리 이 고,WebContent 는 각 jsp 에 디 렉 터 리 를 저장 하 며,lib 는 프로젝트 에 인 용 된 패키지 의 디 렉 터 리 입 니 다.WebTest 프로젝트 디 렉 터 리 에 build.xml 파일 을 만 들 었 습 니 다.이 파일 은 이 프로젝트 의 Ant 구성 요소 파일 입 니 다.
|WebContent
    |src
    |build
        |classes
    |WebContent
        |META-INF
            |MANIFEST.MF
        |WEB-INF
            |lib
            |classes
        |HelloJSP.jsp
    |build.xml
    독자 들 은 src 디 렉 터 리 에 앞의 사례 에서 개 발 된 Hello World.java 파일 을 넣 고 WebContent 에서 HelloJSP.jsp 파일 을 만 들 수 있 습 니 다.그 내용 은 간단 합 니 다.바로 Hello 정 보 를 출력 하 는 것 입 니 다.코드 는 다음 과 같 습 니 다.
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>war test for ant</title> 
</head> 
<body> 
      Hello JSP!Hello Ant! 
</body> 
</html> 

 
       build.xml   ,     :
<?xml version="1.0" encoding="UTF-8" ?> 
<project name ="WebTest" default ="war" basedir ="."> 
    <property  name ="classes" value ="${basedir}/build/classes"/> 
    <property  name ="build" value ="${basedir}/build"/> 
    <property  name ="lib" value ="${basedir}/WebContent/WEB-INF/lib"/> 
     <!--    build   -->
    <target  name ="clean"> 
        <delete dir ="${build}"/> 
    </target> 
  
     <!--    build/classes   ,   class    build/classes    -->
     <target name ="compile"  depends ="clean"> 
        <mkdir dir ="${classes}"/> 
        <javac srcdir ="${basedir}/src"  destdir ="${classes}"/> 
     </target> 
  
     <!--   war  -->
     <target name ="war" depends ="compile"> 
            <war destfile ="${build}/WebTest.war"  webxml ="${basedir}/WebContent/WEB-INF/web.xml"> 
            <!--    WebRoot    WEB-INF  META-INF       -->
             <fileset dir ="${basedir}/WebContent"  includes ="**/*.jsp"/> 
            <!--    lib     jar  -->
            <lib dir ="${lib}"/> 
            <!--    build/classes   class   -->
            <classes dir ="${classes}"/> 
        </war> 
     </target> 
</project> 

  C:\ThinkInJavaCode\WebTest 디 렉 터 리 에서 ant 를 실행 하면 WebTest.war 파일 이 생 성 됩 니 다.그리고 웹 용기(예 를 들 어 Tomcat)의 해당 디 렉 터 리 에 넣 고(${Tomcata 설치 디 렉 터 리}\webapps)웹 프로젝트 를 실행 할 수 있 습 니 다.
 
문장http://www.cnblogs.com/philander/articles/1782254.html

좋은 웹페이지 즐겨찾기