E D R , A S I H C RSS

Ant

Platform 독립적인 Java 의 ν”„λ‘œκ·Έλž¨ 컴파일, 배포 도ꡬ 이닀. λΉ„μŠ·ν•œ μ—­ν• λ‘œ Unix의 make 툴과 Windowsμ—μ„œ ν”„λ‘œκ·Έλž¨ Installer λΌ μƒκ°ν• μˆ˜ μžˆλ‹€.


1. λ“€μ–΄κ°€κΈ° 전에..

일단 이글은 Jarakta ν”„λ‘œμ νŠΈμ˜ 일뢀인 Ant 에 λŒ€ν•œ 메뉴얼(?)같은 κ²ƒμœΌλ‘œμ¨http://jakarta.apache.org/ant/manual/
의 해석 및 의견 μ •λ„λ‘œ μ§„ν–‰λ˜μ—ˆμœΌλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€.

contributor : μž„κ΅¬κ·Ό

2. Ant의 μ†Œκ°œ

Ant λŠ” Java 기반의 Build 툴둜써 Unix 의 make 와 같은 툴이라고 보면 λœλ‹€.
  • μ™œ Ant λΌ μ‚¬μš©ν•΄μ•Ό ν•˜λ‚˜?
    make.gnumake,nmake,jam κ³Ό 같은 λ‹€λ₯Έ Build νˆ΄μ€ 놔두고 μ™œ Ant λΌ μ¨μ•Όν•˜λŠ”κ°€μ— λŒ€ν•œ μ§ˆλ¬Έμ΄λ‹€. Java 기반으둜 ν”„λ‘œκ·Έλž¨μ„ 짜고 컴파일 및 배포용 μ‰˜ ν”„λ‘œκ·Έλž¨μ„ μ§œλ΄€λŠ”κ°€? ν•΄λ΄€λ‹€λ©΄ κ·Έκ²ƒμ˜ 어렀움을 잘 μ•Œκ²ƒμ΄λ‹€. 각 OS λ§ˆλ‹€ μ‰˜ μŠ€ν¬λ¦½νŠΈκ°€ λ‹€λ₯΄κ³  일반적으둜 μ‚¬μš©ν•˜κ³  μžˆλŠ” Unix μ—λŠ” 또 각쒅 μ‰˜λ“€μ΄ μ‘΄μž¬ν•œλ‹€. μœˆλ„μš° μ‰˜ λ˜ν•œ λ³΅μž‘ν•˜κΈ΄ λ§€ν•œκ°€μ§€μ΄κ³  ν”„λ‘œκ·Έλž¨μ„ λͺ¨λ‘ μž‘μ„±ν•˜κ³  컴파일 및 배포 μ‰˜ μŠ€ν¬λ¦½νŠΈλΌ μž‘μ„±ν•˜κΈ° μœ„ν•΄μ„œ 이것듀을 λͺ¨λ‘ μž‘μ„±ν•˜λŠ”κ²ƒ μžμ²΄κ°€ ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ 또 ν•˜λ‚˜μ˜ κ³ λ‚œμ΄ μ•„λ‹κΉŒ μƒκ°ν•œλ‹€.(즉, μ‰˜ ν”„λ‘œκ·Έλž¨μ„ λ°°μ›Œμ•Ό ν•œλ‹€λŠ” 의λΈμ΄λ‹€.)

κ²Œλ‹€κ°€, νŒ€ λ‹¨μœ„ μž‘μ—…μ„ ν•œλ‹€κ³  ν• λ•Œ, μž‘μ—…ν•˜λŠ” 컴퓨터와 IDE 듀이 각각 λ‹€λ₯Έ 경우, IDE 에 λ”°λΌμ„œ classpath, 배포디렉토리 κ²½λ‘œλ“€λ„ λ‹€λΌ κ²ƒμ΄λ‹€.

Ant λŠ” OS Indepenent ν•˜κ²Œ ν”„λ‘œκ·Έλž¨μ„ Build ν•  수 μžˆλŠ” ν™˜κ²½μ„ μ œκ³΅ν•΄μ€λ‹€. build.xml μ΄λž€ Build νŒŒμΌμ„ μž‘μ„±ν•΄μ„œ κ·Έ λ‚΄μš©μ— 따라 Build λΌ μ§„ν–‰ν•΄ λ‚˜κ°ˆ 수 μžˆλ‹€. Ant λŠ” Java μ—μ„œ 거의 ν‘œμ€μœΌλ‘œ κ΅³ν˜€μ Έκ°€κ³  있으며, 거의 λͺ¨λ“  IDE듀이 Ant λΌ μ§€μ›ν•œλ‹€.

3. Install

ν˜„μž¬ Ant λŠ” Binary 와 Source λ‘κ°€μ§€λΌ λ°°ν¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

  1. Ant μ–»κΈ° - IDE 에 λ”°λΌμ„œ Ant κ°€ κΈ°λ³Έλ‚΄μž₯λ˜μ–΄μžˆλŠ” κ²½μš°κ°€ λ§Žλ‹€.
    • http://jakarta.apache.org/ant/index.html μ—μ„œ μ΅œμ‹ λ²„μ „μ˜ binary, source λΌ μ–»μ„ 수 μžˆλ‹€. CVS λΌ μ΄μš©, source λΌ μ–»μ„ μˆ˜λ„ μžˆλ‹€.

  2. μ‹œμŠ€ν…œ μš”κ΅¬μ‚¬ν•­
    Ant λΌ μ‚¬μš©ν•˜μ—¬ Build ν•˜κΈ° μœ„ν•΄μ„œλŠ” JAXP ν˜Έν™˜ XMLνŒŒμ„œκ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 그런데 Ant λΌ λ‹€μš΄λ°›μœΌλ©΄ κ·Έ νŒ¨ν‚€μ§€ μ•ˆμ— ν¬ν•¨λ˜μ–΄ 있으λ€λ‘œ λ”°λ‘œ λ‹€μš΄λ°›μœΌμ‹€ ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. JAXP 에 λŒ€ν•΄μ„œλŠ” http://java.sun.com/xml/ μ •λ³΄λΌ μ–»μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
    Build 툴이기 λ•Œλ¬Έμ— λ‹Ήμ—°νžˆ JDK κ°€ ν•„μš”ν•©λ‹ˆλ‹€. JDK 1.2 이상을 가지고 있으면 λ©λ‹ˆλ‹€.
    Ant 의 λͺ‡λͺ‡ νŠΉμ • Task λ“€μ˜ 경우 (JUnit, FTP, Telnet λ“±) ν•΄λ‹Ή λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν•„μš”ν•˜λ‹€. μ΄λŠ” http://jakarta.apache.org/ant/manual/install.html#librarydependencies ν•­λͺ©μ„ 읽기 λ°”λž€λ‹€.

  3. Install
    λ°”μ΄λ„ˆλ¦¬ νŒŒμΌμ„ κΈ°μ€μœΌλ‘œ μ„λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€. μ„μΉ˜λŠ” Windows 기반으둜 μ„λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€. Unix/Linux κΈ°λ°˜μ„ λΉ„μŠ·ν•˜λ‹ˆ μ•Œμ•„μ„œ(?) ν•˜μ„Έμš”. ^^;

    • 일단 받은 Ant μ••μΆ•νŒŒμΌμ„ C:\Ant 에 ν’€μ–΄ 놓고 μ‹œμž‘ν•΄λ΄…μ‹œλ‹€. ν•˜μœ„ λ””λ ‰ν† λ¦¬λŠ” bin,doc,lib 등이 있겠죠. ^^ (Win 9x μ‹œλ¦¬μ¦ˆμ—μ„œλŠ” ν™˜κ²½λ³€μˆ˜μ— λ“€μ–΄κ°€λŠ” κΈ΄ 파일λͺ…이 λ¬Έμ œκ°€ 될 수 μžˆμœΌλ‹ˆ μœ„μ™€ 같이 C:\Ant 에 μ„μΉ˜ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.)
    • PATH ν™˜κ²½λ³€μˆ˜μ— Ant μ•„λž˜μ— bin λ””λ ‰ν† λ¦¬λΌ μΆ”κ°€ν•©λ‹ˆλ‹€. 즉 C:\Ant\bin 을 μΆ”κ°€ν•©λ‹ˆλ‹€.
    • ANT_HOME μ΄λΌλŠ” ν™˜κ²½ λ³€μˆ˜λΌ λ§Œλ“€κ³  κ·Έμ•ˆμ— Ant κ°€ μ„μΉ˜λœ 디렉토리 값을 λ„£μŠ΅λ‹ˆλ‹€. 즉 C:\Ant λΌ λ„£μŠ΅λ‹ˆλ‹€.
    • JAVA_HOMEμ΄λΌλŠ” ν™˜κ²½λ³€μˆ˜μ—λŠ” JDKκ°€ μ„μΉ˜λœ λ””λ ‰ν† λ¦¬λΌ μΆ”κ°€ν•©λ‹ˆλ‹€.

3.1. Windows Shell
   set ANT_HOME=c:\ant
   set JAVA_HOME=c:\jdk1.3.1_01
   set PATH=%PATH%;%ANT_HOME%\bin

3.2. Unix(Linux) (bash)
   export ANT_HOME=/usr/local/ant
   export JAVA_HOME=/usr/local/jdk-1.3.1_01
   export PATH=${PATH}:${ANT_HOME}/bin


4. Optional Tasks

Ant λŠ” λ‹€μ–‘ν•œ Optional TasksλΌ μ œκ³΅ν•©λ‹ˆλ‹€. 일단 Task λΌλŠ” 말이 μ•žμœΌλ‘œ 많이 λ‚˜μ˜¬ν…λ° Glossary λΌ μ°Έκ³ ν•˜μ„Έμš”. 예λΌλ“€λ©΄ CVS 에 μ†ŒμŠ€λΌ μ—…λ°μ΄νŠΈ ν•΄μ£ΌλŠ” Optional Task κ°€ μžˆμ„ 수 있고, 또 .NET μ»΄νŒŒμΌμ„ ν•œλ‹€λ˜μ§€.. 기타 λ“±λ“± λ‹€μ–‘ν•œ Task κ°€ μžˆμŠ΅λ‹ˆλ‹€. (이에 λŒ€ν•œ μ˜ˆμ œλ‘œλŠ” AntTaskλΌ μ°Έμ‘°)

5. Running

이제 Ant λΌ μ‹€ν–‰ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž. AntλΌ μ‹€ν–‰ν•˜λŠ” 것은 마치 make λͺ…령을 λ‚΄λ¦¬λŠ” κ²ƒμ²˜λŸΌ 쉽닀. Ant μ—μ„œ μ€‘μš”ν•œ 것은 makeμ—μ„œ "Makefile" 을 λ§Œλ“€λ“이 Build νŒŒμΌμ„ 잘 λ§Œλ“œλŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. Build νŒŒμΌμ„ λ§Œλ“œλŠ” 것에 λŒ€ν•΄μ„œλŠ” λ‚˜μ€‘μ— μ•Œμ•„λ³΄κΈ°λ‘œ ν•˜κ³  일단 μ‹€ν–‰ν•˜λŠ” 방법뢀터 μ•Œμ•„λ³΄μ£ .

일단 μ‰˜μ—μ„œ μ‹€ν–‰ν•˜λŠ” κ°„λ‹¨ν•œ ν˜•νƒœλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.(μ—¬κΈ°μ„œ '%'λŠ” μ‰˜μ„ 의λΈν•©λ‹ˆλ‹€.)

~cpp 
  % ant  
이것은 ν˜„μž¬ 디렉토리에 build.xml μ΄λΌλŠ” νŒŒμΌμ„ Build File 둜 ν•΄μ„œ Build λΌ ν•˜κ² λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. build.xml 파일이 μ—†λ‹€λ©΄ μ—λŸ¬λΌ μΆœλ ₯ν•˜κ² μ£ ? ^^

~cpp 
  % ant -buildfile test.xml
이것은 build νŒŒμΌμ„ test.xml μ΄λΌλŠ” νŒŒμΌμ„ build 파일둜 μ‚¬μš©ν•΄μ„œ build ν•˜κ² λ‹€λŠ” 의λΈμž…λ‹ˆλ‹€.

~cpp 
  % ant -buildfile test.xml dist

이것은 λ°”λ‘œ μœ„μ— μžˆλŠ” 것에닀가 distλΌλŠ” 것이 λΆ™μ—ˆλŠ”λ° 이것은 target 을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. Unix/Linux μ—μ„œ make λͺ…λ ΉμœΌλ‘œ 컴파일 해보신 뢄듀을 μ•„μ‹€κ»λ‹ˆλ‹€. 보톡 make λͺ…λ ΉμœΌλ‘œ 컴파일 ν•˜κ³  make install λͺ…λ ΉμœΌλ‘œ μΈμŠ€ν†¨μ„ ν•˜μ£ ? κ±°κΈ°μ„œ 쓰인 install 이 target μž…λ‹ˆλ‹€. Ant μ—μ„œλŠ” Build 파일 μ•ˆμ— λ‹€μ–‘ν•œ target 을 λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆλΌ λ“€λ©΄ debug λͺ¨λ“œ 컴파일과 optimal λͺ¨λ“œ 컴파일 2개의 target 을 λ§Œλ“€μ–΄μ„œ ν…ŒμŠ€νŠΈ ν•  수 있겠죠? ^^

~cpp 
  % ant -buildfile test.xml -Dbuild=build/classes dist
μœ„μ˜ μ˜ˆμ— ν•˜λ‚˜κ°€ 좔가됐죠? -D μ˜΅μ…˜μ€ Build 파일의 Property task 와 같은 역할을 ν•©λ‹ˆλ‹€. 즉 Build File λ‚΄λΆ€μ—μ„œ μ‚¬μš©λ˜λŠ” μΌμ’…μ˜ λ³€μˆ˜λΌ μ„ μ–Έν•œλ‹€κ³  λ³Ό 수 있겠죠? ^^

직접 μ‹€ν–‰ν•˜κΈ°
μ‹€ν–‰ 파일 antλŠ” Unix κ³„μ—΄μ—μ„œλŠ” shell 슀크립트둜 Windows κ³„μ—΄μ—μ„œλŠ” ant.bat λΌλŠ” 배치파일둜 λ°°ν¬λ©λ‹ˆλ‹€. 내뢀에 보면 java ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ”λ°, λ‹€μŒκ³Ό 같이 μžμ‹ μ΄ 직접할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

~cpp 
  % java -Dant.home=c:\ant org.apache.tools.ant.Main [options] [target]

6. Buildfile(build.xml) 을 λ§Œλ“€μ–΄λ³΄μž

Ant λΌ λ‹€λ£°μ„ μ•ˆλ‹€λŠ” 말은 즉, Build File 을 λ§Œλ“€μ„ μ•ˆλ‹€λŠ” 의λΈμ™€ κ°™λ‹€. Build File 은 νŒŒμΌμ΄λ¦„μ—μ„œλ„ μ•Œ 수 있λ“이 xml 을 기반으둜 ν•˜κ³  μžˆλ‹€. 예제둜 μ°Έμ‘°ν•΄λ³Όλ§Œν•œ ν™”μΌλ‘œ Ant/TaskOne, Ant/BuildTemplateExample 이 μžˆλ‹€. ν•΄λ‹Ή 화일을 λ³΄λ©΄μ„œ μ„λͺ…을 읽으면 νŽΈν• κ²ƒμ΄λ‹€.

  • project νƒœκ·Έ
    일단 제일 처음 λ‚˜μ˜€λŠ” Root Element λ‘œλŠ” project νƒœκ·Έλ‘œ ν”„λ‘œμ νŠΈ μ •μ˜λΌ ν•˜λŠ” 곳이닀.
  • Attribute Description Required
    name ν”„λ‘œμ νŠΈμ˜ 이름 No
    default default target λͺ…을 λ„£λŠ” 곳이닀. ant λΌ μ‹€ν–‰ν•  λ•Œ target 을 μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μ—¬κΈ°μ„œ μ§€μ •ν•œ target 으둜 μ‹€ν–‰ν•œλ‹€. Yes
    basedir ν”„λ‘œμ νŠΈμ˜ base λ””λ ‰ν† λ¦¬λΌ λ§ν•œλ‹€. ant λ‚΄λΆ€μ—μ„œ μ‚¬μš©λ˜λŠ” λͺ¨λ“  path 듀은 이 λ””λ ‰ν† λ¦¬λΌ κΈ°λ°˜μœΌλ‘œ ν•œλ‹€. No

    μΆ”κ°€μ μœΌλ‘œ project νƒœκ·Έ 뒀에 description μ΄λž€ νƒœκ·ΈλΌ μ‚¬μš©ν•˜μ—¬ Project λΌ μ„λͺ…ν•  수 μžˆλ‹€.

  • target νƒœκ·Έ
    project νƒœκ·Έ λ‹€μŒμ— 올수 μžˆλŠ” νƒœκ·Έλ‘œ μ•„λž˜ λ‚˜μ˜€λŠ” Task λ“€μ˜ 묢음이라고 μƒκ°ν•˜λ©΄ λœλ‹€.
    기쑴의 Makefile μ΄λΌλ˜μ§€ λ‹€λ₯Έ Build νˆ΄μ„ 보면 μ˜μ‘΄κ΄€κ³„(Dependency)λΌλŠ” 것이 μžˆμ„ 것이닀. 즉, 배포(distribute)λΌλŠ” target 을 μˆ˜ν–‰ν•˜κΈ° 전에 compile μ΄λΌλŠ” target 을 λ¨Όμ € μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” 의쑴 관계가 λ°œμƒν•  수 μžˆμ„ 것이닀. target μ—μ„œλŠ” 이런 μ˜μ‘΄κ΄€κ³„(dependency)λΌ λ‹€μŒκ³Ό 같은 λ°©λ²•μœΌλ‘œ μ œκ³΅ν•œλ‹€.

    <target name="A"/>

    <target name="B" depends="A"/>

    <target name="C" depends="B"/>

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


    μœ„μ˜ μ˜ˆλΌ λ³΄λ©΄ B λŠ” A λΌ μ˜μ‘΄ν•˜κ³  있고, C λŠ” BλΌ DλŠ” CλΌ μ˜μ‘΄ν•˜κ³  μžˆλ‹€. 처음 μ‹œμž‘ν•˜λŠ” tag 라 D라고 ν–ˆμ„ λ•Œ, D λŠ” C에 μ˜μ‘΄ν•˜λ€λ‘œ C λΌ μ‹€ν–‰ν•˜λŸ¬ κ°„λ‹€. C λΌ λ³΄λ©΄ B λΌ μ˜μ‘΄ν•˜λ€λ‘œ B λΌ μˆ˜ν–‰ν•˜κ³  B λŠ” AλΌ μ˜μ‘΄ν•˜λ€λ‘œ A κ°€ μˆ˜ν–‰λœλ‹€. 즉 μ΄κ²ƒμ˜ μˆ˜ν–‰ μˆœμ„œλŠ” A,B,C,D 순으둜 μˆ˜ν–‰λœλ‹€.
    그리고 D κ°€ C 에 μ˜μ‘΄ν•΄μ„œ A,B,C λΌ μˆ˜ν–‰ν•˜κ³  λ‚œ 후에 λ‹€μ‹œ B 에 μ˜μ‘΄ν•˜κ²Œ λœλŠ”λ° BλŠ” ν•œλ²ˆ μˆ˜ν–‰ν–ˆμœΌλ€λ‘œ λ‹€μ‹œ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€. 이점을 μœ μ˜ν•˜λ„λ‘ ν•˜μž. target 은 ν•œλ²ˆλ§Œ μˆ˜ν–‰λœλ‹€.

    μ˜μ‘΄κ΄€κ³„μ™Έμ— target을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œ 쑰건을 κ±Έμ–΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. μ΄λŠ” "'if'"와 "'unless'" λΌλŠ” attribute λΌ μ‚¬μš©ν•΄μ„œ ν•  수 μžˆλ‹€. ν˜•μ‹μ€ λ‹€μŒκ³Ό κ°™λ‹€.

    <target name="build-module-A" if="module-A-present"/>

    <target name="build-own-fake-module-A" unless="module-A-present"/>



  • Task κ΄€λ ¨ νƒœκ·Έλ“€

  • property νƒœκ·Έ - μΌμ’…μ˜ λ³€μˆ˜μ—­ν• μ„ ν•œλ‹€. μ˜ˆμ œλ“€μ„ 보면 property νƒœκ·Έλ‘œ μ •μ˜ν•œ λ³€μˆ˜λ“€μ΄ μ–΄λ–»κ²Œ μ΄μš©λ˜λŠ”μ§€ μ•Œ 수 μžˆλ‹€.

  • Path-like ꡬ쑰

  • arg νƒœκ·Έ

7. Glossary

  • Build File : Build 의 μˆœμ„œ 및 각 단계별 μž‘μ—…λ“€μ— λŒ€ν•΄μ„œ xml ν˜•μ‹μœΌλ‘œ 적어놓은 νŒŒμΌμ„ λ§ν•œλ‹€. Ant μ—μ„œλŠ” default 둜 build.xml 을 μ‚¬μš©ν•œλ‹€.
  • Task : Ant μ—μ„œμ˜ μž‘μ—…λ‹¨μœ„(λΉŒλ“œ, CVS, FTP, JUnit μ‹€ν–‰ λ“±λ“±)λΌ λ§ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ˜ˆλΌ λ“€μ–΄ μ„λͺ…ν•˜λ©΄ property task λŠ” Antμ—μ„œ μ“°λŠ” λ³€μˆ˜(μ‰˜μ—μ„œμ˜ ν™˜κ²½λ³€μˆ˜μ™€ λΉ„μŠ·ν•œ)의 값을 μ„μ •ν•©λ‹ˆλ‹€. Ant/TaskOne
  • Target : Taskλ“€μ˜ μ§‘ν•©μœΌλ‘œ μ„œλ‘œκ°„μ˜ μ˜μ‘΄κ΄€κ³„μ™€ 주어진 쑰건에 따라 μˆ˜ν–‰λœλ‹€.


8. κ΄€λ ¨κΈ€λ“€

AntHill, CruiseControl λ“±μ˜ 툴과 μ—°λ™ν•˜μ—¬ μ΄μš©ν•˜κΈ°λ„ ν•œλ‹€. 이 νˆ΄λ“€μ€ ν•΄λ‹Ή ant build λΌ μŠ€μΌ€μ„λŸ¬μ— λ§žμΆ°λ†“κ³ , ν•΄λ‹Ή μ‹œκ°„μ΄ 되면 μžλ™μœΌλ‘œ ν•΄λ‹Ή ant build file을 μ‹€ν–‰ν•΄μ€λ‹€. See Also Wiki:AntHill, Wiki:CruiseControl



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:30
Processing time 0.0475 sec