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 μλ λ κ°μ’ μλ€μ΄ μ‘΄μ¬νλ€. μλμ° μ λν 볡μ‘νκΈ΄ λ§€νκ°μ§μ΄κ³ νλ‘κ·Έλ¨μ λͺ¨λ μμ±νκ³ μ»΄νμΌ λ° λ°°ν¬ μ μ€ν¬λ¦½νΈλ₯Ό μμ±νκΈ° μν΄μ μ΄κ²λ€μ λͺ¨λ μμ±νλκ² μμ²΄κ° νλ‘κ·Έλλ¨Έμκ² λ νλμ κ³ λμ΄ μλκΉ μκ°νλ€.(μ¦, μ νλ‘κ·Έλ¨μ λ°°μμΌ νλ€λ μλ―Έμ΄λ€.)
Ant λ OS Indepenent νκ² νλ‘κ·Έλ¨μ Build ν μ μλ νκ²½μ μ 곡ν΄μ€λ€. build.xml μ΄λ Build νμΌμ μμ±ν΄μ κ·Έ λ΄μ©μ λ°λΌ Build λ₯Ό μ§νν΄ λκ° μ μλ€. Ant λ Java μμ κ±°μ νμ€μΌλ‘ κ΅³νμ Έκ°κ³ μμΌλ©°, κ±°μ λͺ¨λ IDEλ€μ΄ Ant λ₯Ό μ§μνλ€.
3. Install ¶
νμ¬ Ant λ Binary μ Source λκ°μ§λ₯Ό λ°°ν¬νκ³ μμ΅λλ€.
- Ant μ»κΈ° - IDE μ λ°λΌμ Ant κ° κΈ°λ³Έλ΄μ₯λμ΄μλ κ²½μ°κ° λ§λ€.
- http://jakarta.apache.org/ant/index.html μμ μ΅μ λ²μ μ binary, source λ₯Ό μ»μ μ μλ€. CVS λ₯Ό μ΄μ©, source λ₯Ό μ»μ μλ μλ€.
- http://jakarta.apache.org/ant/index.html μμ μ΅μ λ²μ μ binary, source λ₯Ό μ»μ μ μλ€. CVS λ₯Ό μ΄μ©, source λ₯Ό μ»μ μλ μλ€.
- μμ€ν
μꡬμ¬ν
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 νλͺ©μ μ½κΈ° λ°λλ€.
- 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"/>μμ μλ₯Ό 보면 B λ A λ₯Ό μμ‘΄νκ³ μκ³ , C λ Bλ₯Ό Dλ Cλ₯Ό μμ‘΄νκ³ μλ€. μ²μ μμνλ tag λΌ DλΌκ³ νμ λ, D λ Cμ μμ‘΄νλ―λ‘ C λ₯Ό μ€ννλ¬ κ°λ€. C λ₯Ό 보면 B λ₯Ό μμ‘΄νλ―λ‘ B λ₯Ό μννκ³ B λ Aλ₯Ό μμ‘΄νλ―λ‘ A κ° μνλλ€. μ¦ μ΄κ²μ μν μμλ A,B,C,D μμΌλ‘ μνλλ€.
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>
κ·Έλ¦¬κ³ 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. κ΄λ ¨κΈλ€ ¶
- Ant μλ°μ€ν°λκ°μ’
- Ant/BuildTemplateExample
- Ant/JUnitAndFtp
- Eclipse, IntelliJ
- http://jstorm.pe.kr/BBS/files/colJApp/ant_jinho.pdf - JStorm ant document
- Test your knowledge of Ant

