Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

[문법] 개미 잡자~!!

CM/Ant 2012.10.05 16:47
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



1.  ant의 주요 옵션에 대해 알아보자.
옵션 설명
-help 도움말을 출력한다.
-projecthelp 프로젝트의 도움말 정보를 출력한다.
-version 버전 정보를 출력한다.
-quiet 적은 양의 메시지를 출력한다.
-verbose 추가적인 메시지를 출력한다.
-debug 디버깅 정보를 출력한다.
-logfile file 로그 메시지를 file에 기록한다.
-buildfile file 지정한 file을 빌드 파일로 사용한다.
-Dproperty=value 이름이 property인 프로퍼티의 값을 value로 지정한다.

빌드파일로 build.xml이 아닌 acetbuild.xml을 사용하고 싶다면!! 또한, 작업대상을 flavio로 하고 싶다면!

--> ant -buildfile acetbuild.xml flavio

또한, 파라미터 즉 인자를 넣고 싶다면!!
--> ant -buildfile acetbuild.xml -Dhahahaha=$testparm flavio
으로 해주면 된다. $testparm은 동적으로 값을 받은 것!


2. ANT의 사용

형태는 다음과 같다.
<project name="프로젝트이름" default="기본타겟이름" basedir="." >
    
    <target name="타겟이름">
      <property name="프로퍼티이름1" value="프로퍼티값1"/>
      <property name="프로퍼티이름2" value="프로퍼티값2"/>
    </target>
  
    <target name="타겟이름1">
      <task명/>
      <task명1 dir="${build}"/>
      <property name="프로퍼티이름3" value="프로퍼티값3"/>
    </target>
  
    <target name="타겟이름2" depends="타겟이름1">
      <태스크명2 속성1="값1" 속성2="값2"/>
    </target>
  
  </project>
앞으로 빌드를 하기 위해 build.xml 즉, 빌드에 필요한 xml 파일을 알맞게 작성을 해야한다.

위에서 중요하게 봐야 할 것은 붉은표시가 되어있는 project, target, property, task명 이다.

2-1. project
프로젝트에 대해서 알아보자^-^good~
<project> tag는
   1) 빌드파일의 루트tag!!
   2) 모든 빌드파일은 하나의 project tag를 가진다!!
   3) project tag는 프로젝트를 설명하기 위해 다음고 같은 속성을 사용한다.

속성 설명 필수여부
      name 프로젝트의 이름       필수아님
     default ant.bat 파일을 실행할 때 [타겟]이 지정되지 않을 때 기본적으로 사용할 타겟        필수
     basedir 경로 계산을 할 때 사용할 기본 디렉토리. basedir 프로퍼티를 지정했을 경우, 그 값을 이 속성에서 지정한 값으로 대체한다.만약 이 속성도 지정하지 않고 basedir 프로퍼티도 지정하지 않았을 경우에는 빌드 파일이 위치하는 디렉토리를 기본 디렉토리로 사용한다.      필수 아님

       ※ ant 수행 시 target을 정해주지 않으면 default가 수행 된다.

2-2. target
<target> 태그는 <project> 태그에 포함되며, 실제로 프로젝트가 수행하게 될 작업(태스크)을 지정한다. <target> 태그의 기본 구조는 다음과 같다.
    <target name="타겟이름1">
      <task명/>
      <task1 dir="${build}"/>
      <property name="프로퍼티이름3" value="프로퍼티값3"/>
    </target>
특징
  1) 하나의 <project>에 여러 개의 <target> 포함 가능.
  2) <target> 태그는 그 타켓을 통해 수행하고자 하는 태스크(작업)을 명시 한다.
     => 그냥 target 만 선언하고 task를 명시 하지 않고 그냥 command를 수행 할 수도 있다!
     <target name="stage-workspace">
         <echo message="Cleaning Staging Directory: ${staging-dir}"/>
         <delete dir="${staging-dir}" quiet="true"/>
      </target>
  3) 의존관계가 있다.

[참고1]
    <target name="compile">
      ...
    </target>

    <target name="apidoc">
      ...
    </target>

    <target name="makeproduct">
      ...
    </target>

 ex) 위처럼 여러개의 타겟이 있다고 치면,
아래는 반드시 compile -> apidoc -> makeproduct로 수행 된다고 하면 각각의 타켓 순서는
compile target, apidoc target, makeproduct target 이 된다.
즉, apidoc target은 compile에 의존하고, makeproduct target은 apidoc target에 의존하게 된다.
이러한 의존관계는 <target> 태그의 depends 속성을 통해 지정 할 수 있다.

ex)

  <target name="A"/>
  <target name="B"/>
  <target name="C"/>
  <target name="D" depends="C,B,A"/>

여기서 여러분이 최종적으로 실행하고자 타겟이 D라고 해 보자. 이 때, 타겟 D의 depends 속성의 값은 "C,B,A"인데 이는 타겟 D를 실행하기 위해서는 먼저 타겟 C, B, A가 수행되어야 함을 의미한다. 이때 타겟 C, B, A가 수행되는 순서는 depends 속성에 표시된 순서대로 수행되게 된다. 즉, 타겟 D를 실행하면 타겟 C가 먼저 실행되고, 그 다음 타겟 B, 그 다음 타겟 A, 그리고 마지막으로 타겟 D가 실행된다.

즉, [참고1]은 다음과 같이 변형이 가능하다.

   <target name="compile">
      ...
    </target>

    <target name="apidoc" depends="compile">
      ...
    </target>

    <target name="makeproduct" depends="apidoc">
      ...
    </target>

   4) target 태그의 설명은 description 속성을 통해서 할 수 있다. description 속성에 명시한 값은 ant.bat을
      실행할 때 명령행 옵션인 -projecthelp를 통해서 볼 수 있다.

2-3. task
    target이 각 수행할 작업간의 의존관계나 수행 조건 등을 표시한다면!!
    task는 타켓 내에서 실제로 수행할 작업을 나타낸다!!  

"여러분은 태스크를 통해서 소스 코드를 컴파일하고 파일을 복사/삭제하고 API 문서를 생성할 수 있다. "


anyway~!

구조는 다음과 같다. task의 구조!
  <태스크명 속성1="값1" 속성2="값2" ... />

'태스크명'은 태스크의 이름을 나타내고 '속성n'과 '값n'은 각각 태스크를 처리할 때 사용할 속성값을
 나타낸다.

ex) <delete dir="${staging-dir}" quiet="true"/>

Task는 
  1) 이미 만들어져 있는 빌트인(built-in) 태스크를 사용 가능
  2) 추가적으로 제공되는 옵션(optional) 태스크를 사용 가능
  3) 직접 작성한 태스크를 사용 가능

예를 들어, 빌트인 태스크인 javac를 사용하여 소스 코드를 컴파일 할 때는 다음과 같이 <target> 태그에 javac 태스크를 중첩시키면 된다.

  <target name="compile" depends="init">
     <javac srcdir="${src}"
            destdir="${build}"
            classpath="jcorelogging.jar"  />
  </target>

위 코드에서 <javac src="${src}" ... /> 태그가 <target> 태그에 중첩되어 있는 것을 알 수 있는데,
이때 javac는 태스크명을 나타내며, srcdir과 destdir, classpath는 각각 javac 태스크에서 사용되는 속성을 나타낸다. 그리고 각 속성의 값 중, "${"로 시작하고 "}"로 끝나는 것이 있는데 이는 프로퍼티를 나타내는 것으로서 "${"와 "}" 사이에 있는 문자열의 프로퍼티의 이름이다. 그냥 값이라보면 된다.

2-4. property
프로젝트를 진행하다보면 다양한 프로퍼티를 사용하게 된다.
컴파일 할 소스 코드의 위치, 컴파일 된 클래스 파일을 저장할 디렉토리, 압축한 파일을 위치시킬 디렉토리 등 유연한 개발을 위해서는 다양한 프로퍼티의 사용이 필수적이라 할 수 있다.

Ant는 이처럼 빌드 과정에서 사용되는 다양한 프로퍼티를 지정할 수 있도록 하고 있으며,
또한 몇몇 개의 빌트인 프로퍼티를 제공하고 있다.

프로퍼티의 지정은 property 태스크를 통해서 할 수 있으며, property 태스크는 표4와 같은 속성을 갖고 있다.

표4 - property 태스크의 속성
속성 설명 필수여부
name 설정할 프로퍼티의 이름 필수아님
value 프로퍼티의 값 name 속성을 사용할 경우 세 속성중의 하나를 지정해야 한다.
location 프로퍼티를 주어진 파일의 절대 파일명으로 지정한다. 이 속성의 값이 절대 경로일 경우, '/'나 '\'와 같은 구분자는 현재 플래폼에 알맞게 처리된다. 절대 경로가 아닐 경우 프로젝트의 basedir에 상대적인 경로로 처리된다.
refid 다른 곳에서 정의된 객체를 참조한다.
resource 프로퍼티 파일을 나타내는 자원의 이름 name 속성을 사용하지 않을 때 이 세 속성중의 한 개를 사용해야 한다.
file 프로퍼티 파일의 파일 이름
environment 환경 변수를 읽을 때 사용할 접두어. 만약 environment="myenv"라고 지정했다면, OS에 종속적인 환경변수인 PATH나 TEMP와 같은 값을 "myenv.PATH"나 "myenv.TEMP"와 같은 프로퍼티 이름을 사용하여 구할 수 있다.
classpath 자원을 검색할 때 사용할 클래스패스 필수아님
classpathref 다른 곳에서 정의된 PATH에 대한 참조로서 주어진 자원을 검색할 때 사용할 클래스패스 필수아님

예를 들어, "buildno" 속성의 값을 "356"으로 지정하고 싶다면 다음과 같이 하면 된다.

  <property name="buildno" value="356"/>

또한, 특정한 파일에 저장된 프로퍼티를 사용하고 싶다면 다음과 같이 file 속성을 사용하면 된다.

  <property file="build355.properties" />

Ant의 빌드 파일에서는 자바에서 기본적으로 제공하는 "java.version"과 같은 시스템 프로퍼티를 기본적으로 사용할 수 있으며, 추가적으로 Ant 자체에서 기본적으로 제공하는 프로퍼티를 사용할 수 있다. Ant가 기본적으로 제공하는 프로퍼티 목록은 다음표와 같다.

표5 - Ant가 기본적으로 제공하는 프로퍼티 목록
프로퍼티 설명
basedir 프로젝트의 기본 디렉토리에 대한 절대 경로. <project> 태그의 basedir 속성값을 사용한다.
ant.file 빌드 파일의 절대 경로
ant.version Ant의 버전
ant.project.name 현재 실행중인 프로젝트의 이름. <project> 태그의 name 속성값을 사용한다.
ant.java.version Ant가 발견한 Java의 버전

프로퍼티는 특정한 타켓에서만 사용되도록 지정할 수도 있고 전체에서 사용되도록 지정할 수도 있다. 다음 예를 살펴보자.

  <project name="MyProject" default="dist" basedir=".">
  
    <!-- 빌드를 위한 글로벌 프로퍼티 -->
    <property name="build" value="build"/>
    <property name="dist"  value="dist"/>
  
    <target name="init">
      <!-- init 타켓 내에서 프로퍼티 지정 -->
      <property name="src" value="."/>
      <mkdir dir="${build}"/>
    </target>
  
    <target name="compile" depends="init">
      <javac srcdir="${src}" destdir="${build}"/>
    </target>
  
    <target name="dist" depends="compile">
      <mkdir dir="${dist}/lib"/>
  
      <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
    </target>
  
    <target name="clean">
      <delete dir="${build}"/>
      <delete dir="${dist}"/>
    </target>
  </project>


위 빌드 파일을 보면 build, dist 프로퍼티는 프로젝트 전체에서 사용될 수 있는 프로퍼티로서
빌드 파일의 어떤 곳에서든지 사용될 수 있다. 반면에 init 타켓 내에 정의된 src 프로퍼티는 init 타켓에
직간접적으로 의존하고 있는 타켓에서만 사용될 수 있다.
위 코드에서는 init 타켓에 의존하고 있는 compile 타켓에서 src 프로퍼티를 사용할 수 있음을 알 수 있다.
또한 간접적으로 init 타겟에 의존하고 있는 dist 타겟 역시 src 프로퍼티를 사용하고 있다.

더 많은 내용이 있지만 기본적으로 위의 내용들을 숙지하면 될 것 같다^-^good~



참고 사이트 : http://timeless0312.blogspot.kr/2008/09/apache-ant%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%B9%8C%EB%93%9C%EC%9E%90%EB%8F%99%ED%99%94.html

'CM > Ant' 카테고리의 다른 글

Hello World 찍기! & for 루프 사용!!  (0) 2012.10.05
[문법] 개미 잡자~!!  (0) 2012.10.05
ANT 셋팅  (0) 2012.02.15
tar.gz 압축 풀기  (4) 2012.02.15

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

배포 하기

CM/Svn 2012.02.22 16:04
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

1. SVN
2. ANT
3. 배포 Shell

이 3박자로 배포하는것을 만들려고 한다.

상황은 이렇다.

svn 설치 완료, ant 설치완료
이클립스에서 svn을 연동한 뒤 commit 완료!

서버에 가서 소스를 찾아보았으나 소스를 찾을수 없었다.....

알고보니 repository 밑에 db 밑에 있었다. 파일 형식이 다른 것이였다.
이런 형식으로 되어있다.
./   ../  0*   1*   10*  11*  12*  13*  14*  15*  16*  17*  18*  19*  2*   20*  21*  22*  23*  24*  25*  3*   4* 

자 그럼 소스를 배포를 할려면!!

[1] 배포하기 위한 소스를 import하자! 어디에?? svn에!

1) 명령어 : svn import target http://20.100.32.199/svn/sample/trunk
위의 명령어는 target : 소스가 있는 곳 상위디렉토리에서 치면 된다.

2) 아래의 내용이 나올 것이다. :q!로 빠져나가자
--This line, and those below, will be ignored--

A    target

3) 아래의 내용이 나오면 c 를 누르면 된다.
Log message unchanged or not specified
a)bort, c)ontinue, e)dit

4) 아래와 같이 된다.

Adding         target/emartStudy07.java

Committed revision 26.

결과는 아래와 같이 해보면 된다.





또는 명령어 : svn list http://20.100.32.199/svn/sample/trunk   를 쳐본다.

결과 : svn list http://20.100.32.199/svn/sample/trunk
         emartStudy07.java

배포 쉘 내용
build build-$1
deploy deploy-$1


#! /bin/sh
cd /app/boons/drugstore_project/drug

if [[ $1 = "" ]] ; then
    echo "Usage:%>build \$target"
    echo "##################################################"
    echo "List of usable build target"
    echo "##################################################"
    ant -p


    exit 1
fi


ant "$@"


음...현재 헷깔리는게 흐름이다.

내 생각에는
1. commit시 소스가 서버에 업데이트
2. svn update 명령어를 통해 리비전 업데이트
(ex. svn update -r 36818 www/front/static/js/indexPopCommon.js)
3. 서버에 있는 소스로 빌드(ant)
4. 배포 파일 리포트 작성
5. 스크립트를 통하여 web, was 서버에 배포! or 백업, 롤백..

음..더 생각해보자!



svn 디렉토리

trunk : 단어 자체의 뜻은 본체 부분, 나무줄기, 몸통 등 입니다. 프로젝트에서 가장 중심이 되는 디렉토리입니다. 모든 프로그램 개발 작업은 trunk 디렉토리에서 이루어집니다. 그래서 위의 구조에서 trunk 디렉토리 아래에는 바로 소스들의 파일과 디렉토리가 들어가게 됩니다.

branches : 나무줄기(trunk)에서 뻗어져 나온 나무 가지를 뜻합니다. trunk 디렉토리에서 프로그램을 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생깁니다. 프로젝트안의 작은 프로젝트라고 생각하면 됩니다. branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발하게 됩니다.

tags : tag는 꼬리표라는 뜻을 가지고 있습니다. 이 디렉토리는 프로그램을 개발하면서 정기적으로 릴리즈를 할 때 0.1, 0.2, 1.0 하는 식으로 버전을 붙여 발표하게 되는데 그때그때 발표한 소스를 따로 저장하는 공간입니다. 위에서 보면 tags 디렉토리 아래에는 버전명으로 디렉토리가 만들어져 있습니다.





 

'CM > Svn' 카테고리의 다른 글

about svn:externals  (0) 2015.01.15
ubuntu에 svn 설치 하기(CollabNet Subversion Edge)  (6) 2013.06.04
이클립스 SVN Repository에서 한글 깨짐 현상  (0) 2012.06.19
배포 하기  (0) 2012.02.22

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바