അപ്പാച്ചെ ആന്റ്

സോഫ്റ്റ്‌വെയർ ബിൽഡ് പ്രക്രിയകൾ ഓട്ടോമേറ്റ് ചെയ്യുന്നതിനുപയോഗിക്കുന്ന ഒരു സോഫ്റ്റ്‌വെയർ ആണ്‌ **അപ്പാച്ചെ ആന്റ്**. സോർസ് കോഡ് കമ്പൈൽ ചെയ്യുക, ബൈനറി രൂപത്തിലാക്കിയ കോഡ് ഫയലുകളെ പാക്കേജുകളാക്കുക, ഉദാ: ജാർ, ടെസ്റ്റുകൾ നടത്തുക, ഡെവലപ്പറുടെ സിസ്റ്റത്തിൽ നിന്നും പ്രൊഡക്ഷൻ സിസ്റ്റത്തിലേക്ക് കോഡ് ഡിപ്ലോയ് ചെയ്യുക, ഡോക്യുമെന്റേഷൻ ഉണ്ടാക്കുക എന്നിങ്ങനെയുള്ള കാര്യങ്ങളാണ് ബിൽഡ് പ്രക്രിയയിൽ നടക്കുന്നത്. 

അപ്പാച്ചെ സോഫ്റ്റ്‌വെയർ ഫൗണ്ടേഷൻ ആണ്‌ ആന്റ് നിർമ്മിച്ചിരിക്കുന്നത്. ഓപ്പൺ സോഴ്സിൽ അധിഷ്ഠിതമായി നിർമ്മിച്ചിരിക്കുന്ന ഈ സോഫ്റ്റ്‌വെയർ അപ്പാച്ചെ സോഫ്റ്റ്‌വെയർ ലൈസൻസിനു കീഴിലാണ്‌ വരുന്നത്.

അനതർ നീറ്റ് റ്റൂൾ(Another Neat Tool) എന്നതിന്റെ ചുരുക്കമാണ് ആന്റ്(ANT).

മെയ്ക്ക്(make) സോഫ്റ്റ്‌വെയറിന് സമാനമായ ഒരു റ്റൂളാണ് ഇത്. ആന്റും മെയ്ക്കും തമ്മിലുള്ള പ്രധാന വ്യത്യാസം ആന്റ് ബിൽഡ് പ്രക്രിയയെ നിർവചിക്കാൻ എക്സ്.എം.എൽ. ആണ് ഉപയോഗിക്കുന്നത് പക്ഷേ മെയ്ക്കിൽ ഈ ആവശ്യത്തിന് ഒരു മെയ്ക്ക്‌ഫയൽ ഫോർമാറ്റ് ഉണ്ട്. ഓരോ പ്രൊജക്റ്റിനും ഒരു ബിൽഡ് ഫയൽ ഉണ്ട്, സാധാരണഗതിയിൽ ആന്റ് ബിൽഡ് ഫയലുകൾക്ക് ബിൽഡ്.എക്സ്എംഎൽ (build.xml) എന്ന പേരാണ് കൊടുക്കാറുള്ളത്, പക്ഷേ '-buildfile' എന്ന കമാൻഡ്‌ലൈൻ നിർദ്ദേശം ഉപയോഗിച്ച് നമുക്കിഷ്ടമുള്ള പേര് ബിൽഡ് ഫയലിന് കൊടുക്കാവുന്നതാണ്.

ആന്റ് ഒരു ജാവാ അധിഷ്ഠിത പ്രോഗ്രാമാണ്, ആയതിനാൽ പ്രവർത്തനത്തിന് ജാവാ റൺടൈമിന്റെ ആവശ്യമുണ്ട്.  ജാവാ പ്രൊജക്ടുകൾ ബിൽഡ് ചെയ്യുന്നതിനു ഏറ്റവും അനുയോജ്യമായ സോഫ്റ്റ്‌വെയറാണ് ഇത്.

## ചരിത്രം
സൺ മൈക്രോസിസ്റ്റംസിൽ ജോലി ചെയ്തിരുന്ന സമയത്ത് ജെയിംസ് ഡങ്കൻ ഡേവിഡ്സൺ എന്ന ഡെവലപ്പറുടെ മനസ്സിൽ ഉദിച്ച ആശയമാണ് ആന്റ്.
 സണ്ണിന്റെ ജെ.എസ്.പി/സെർവ്‌ലെറ്റ് എൻജിൻ (JSP/Servlet engine) ഓപ്പൺ സോർസ് ആക്കിക്കൊണ്ടിരുന്ന സമയത്താണ് ഇങ്ങനൊരു ആശയം ഉടലെടുത്തതു, ഈ ജെ.എസ്.പി/സെർവ്‌ലെറ്റ് എൻജിനാണ് പിന്നീട് അപ്പാച്ചെ റ്റോംക്യാറ്റ് ആയി മാറിയത് . മെയ്ക്കിന്റെ ഉടമസ്ഥാവകാശമുള്ള ഒരു പതിപ്പായിരുന്നു റ്റോംക്യാറ്റ് പദ്ധതിയിൽ ആദ്യം ഉപയോഗിച്ചിരുന്നത്, ഒരു എക്സ്.എം.എൽ ഫയലിൽ പറഞ്ഞുകൊടുത്തിരിക്കുന്ന വിവരങ്ങൾക്കനുസൃതമായി റ്റോംക്യാറ്റ് സോർസ് കോഡ് ബിൽഡ് ചെയ്യാൻ വേണ്ടിയുള്ള ലളിതമായ ഒരു പ്ലാറ്റ്ഫോംനിരപേക്ഷ സോഫ്റ്റ്‌വെയർ എന്ന നിലയിലാണ് ആന്റ് വികസിപ്പിച്ചത്.

ആന്റ് മുഖേന ബിൽഡ് ചെയ്യുമ്പോൾ അക്കൂടെ ജെയൂണിറ്റ് (JUnit) ഉപയോഗിച്ചുള്ള ടെസ്റ്റുകൾ സമന്വയിപ്പിക്കുന്നത് വളരെ എളുപ്പമാണ്, ഇക്കാരണത്താൽ ഡെവലപ്പർമാർക്ക് ഒരു ടെസ്റ്റ് നിയന്ത്രിത സോഫ്റ്റ്‌വെയർ വികസനരീതി അധികം ആയാസം കൂടാതെ നടപ്പിലാക്കുവാൻ സാധിക്കും.

## ബിൽഡ്.എക്സ്എംഎൽ ഫയൽ
ഒരു ചെറിയ ബിൽഡ്.എക്സ്എംഎൽ ഫയൽ (build.xml) ഫയൽ ആണു താഴെക്കൊടുത്തിരിക്കുന്നത്.


```xml
<?xml version="1.0"?>
<project name="Hello" default="compile">
    <target name="clean" description="remove intermediate files">
        <delete dir="classes"/>
    </target>
    <target name="clobber" depends="clean" description="remove all artifact files">
        <delete file="hello.jar"/>
    </target>
    <target name="compile" description="compile the Java source code to class files">
        <mkdir dir="classes"/>
        <javac srcdir="." destdir="classes"/>
    </target>
    <target name="jar" depends="compile" description="create a Jar file for the application">
        <jar destfile="hello.jar">
            <fileset dir="classes" includes="**/*.class"/>
            <manifest>
                <attribute name="Main-Class" value="HelloProgram"/>
            </manifest>
        </jar>
    </target>
</project>
```


ഇതൊരു സാധാരണ എക്സ്.എം.എൽ ഫയൽ തന്നെയാണ് അതിനാൽ ആദ്യത്തെ വരി എക്സ്.എം.എൽ ഡിക്ലറേഷൻ ആണ്, എക്സ്‌എം‌എൽ പതിപ്പ്, എൻകോഡിങ്ങ് തരം തുടങ്ങിയ വിവരങ്ങളാണ് ഇവിടെ കൊടുക്കേണ്ടത്. അടുത്ത വരിയിൽ എക്സ്‌‌എം‌എൽ പ്രമാണത്തിന്റെ മൂല ഘടകം (root element) നിർവചിച്ചിരിക്കുന്നു, **<project>** ആണ് ഈ എക്സ്‌എംഎൽ പ്ര‌മാണത്തിന്റെ മൂല ഘടകം അഥവാ റൂട്ട്‌ എല‌മെന്റ് , ഇതിനുള്ളിലാണ് ബിൽഡ് ഫയലിന്റെ മറ്റ് ഘടകങ്ങൾ ഉള്ളത്.  എന്ന ഘടകത്തിന് മൂന്ന്  ഐച്ഛിക ഗുണങ്ങൾ ന‌മുക്ക് പറഞ്ഞു കൊടുക്കുവാൻ സാധിക്കും
***name** - ബിൽഡ് ചെയ്യാനുദ്ദേശിക്കുന്ന പ്രൊജക്റ്റിന്റെ പേര്
***default** - ടാർഗറ്റ് ഒന്നും കൃത്യമായി പറഞ്ഞിട്ടില്ലെങ്കിൽ ഉപയോഗിക്കേണ്ട ടാർഗറ്റ് 
***basedir** - ബേസ് ഡിറക്‌ടറി, ഈ ഡിറക്‌ടറിയെ അടിസ്ഥാനമാക്കിയാണ്  പ്രൊജക്റ്റിലെ മറ്റ് ഫയൽ പാത്തുകൾ എല്ലം കണക്കാക്കുന്നത്   
ചെയ്യേണ്ട ജോലികളുടെ അഥവാ ടാസ്കുകളുടെ ഒരു കൂട്ടത്തിനാണ് ആന്റ് ബിൽഡ് ഫയലിൽ ടാർഗറ്റ് എന്ന് പറയുന്നത്. ഇവയെ **<target>** എന്ന ടാഗ് ഘടകത്തിനുള്ളിലാണ് എഴുതുക.  ഘടകത്തിന് താഴെപ്പറയുന്ന ചില ഗുണങ്ങൾ നമുക്ക് പറഞ്ഞു കൊടുക്കുവാൻ സാധിക്കും
***name** - ടാർഗറ്റിന്റെ പേര്	
***depends** - ഈ ടാർഗറ്റിന്റെ പ്രവർത്തനം മറ്റേതെങ്കിലും ടാർഗറ്റുകളെ ആശ്രയിക്കുന്നുണ്ടെങ്കിൽ അവ ഏതൊക്കെയാണെന്നുള്ള വിവരം, ഒന്നിൽ കൂടുതൽ ടാർഗറ്റുകളെ ആശ്രയിക്കുന്നുണ്ടെങ്കിൽ അവ ഒന്നൊന്നായി അല്പവിരാമം (comma) ഉപയോഗിച്ച് വേർതിരിച്ചെഴുതുക 
***if** - ടാർഗറ്റ് പ്രവർത്തിക്കണമെങ്കിൽ സെറ്റ് ചെയ്തിരിക്കേണ്ട പ്രോപ്പർട്ടിയുടെ പേര്
***unless** - ടാർഗറ്റ് പ്രവർത്തിക്കണമെങ്കിൽ സെറ്റ് ചെയ്യാതിരിക്കേണ്ട പ്രോപ്പർട്ടി ഏതാണ്
***description** - ടാർഗറ്റിന്റെ പ്രവർത്തനം സംബന്ധിച്ച ഒരു ചെറിയ വിവരണം
ഒരു പ്രോജക്റ്റിൽ പൂജ്യമോ അതിലധികമോ ടാർജറ്റുകൾ നിർവചിക്കപ്പെട്ടിട്ടുണ്ടാവും. ടാർഗറ്റുകളുടെ എണ്ണം പൂജ്യമാണെങ്കിൽ അതായത് ടാർഗറ്റുകൾ ഒന്നും തന്നെയില്ലെങ്കിൽ  ടാഗിനുള്ളിലെ ഡീഫോൾട്ട് ആയിരിക്കും ടാർഗറ്റ്. ടാർഗറ്റുകൾ കണ്ടീഷണൽ ആയി പ്രവർത്തിപ്പിക്കുവാൻ സാധിക്കും, ഈഫ് (if), അൺലെസ് (unless) എന്നിങ്ങനെയുള്ള കണ്ടീഷൻസ് ഉപയോഗിച്ച്. ചില ടാർഗറ്റുകൾ മറ്റു ടാർഗറ്റുകളെ ആശ്രയിച്ചായിരിക്കും പ്രവർത്തിക്കുന്നത്, അങ്ങനെയുള്ള അവസരങ്ങളിൽ ഏതൊക്കെ ടാർഗറ്റുകളെയാണോ ആശ്രയിക്കുന്നതു അവ ആദ്യം പൂർത്തീകരിക്കേണ്ടി വരും.
### ടാസ്ക്
ആന്റ് ഉപയോഗിച്ച് പ്രവർത്തിപ്പിക്കുവാൻ സാധിക്കുന്ന കോഡ് ശകലത്തിന് ടാസ്ക് എന്നു പറയുന്നു. ബിൽഡ് പ്രക്രിയയുടെ ഭാഗമായ ചെറു ജോലികളെയാണ് ടാസ്കുകളായി എഴുതുന്നത്. ഉദാഹരണത്തിന് ഡിറക്റ്ററി സൃഷ്ടിക്കുക (mkdir), കമ്പൈൽ ചെയ്യുക (javac) തുടങ്ങിയ ജോലികൾ.  ഒരു ടാസ്കിന് നിരവധി ഗുണങ്ങൾ (attributes) അല്ലെങ്കിൽ ആർഗ്യുമെന്റുകൾ (arguements) സ്വീകരിക്കുവാൻ സാധിക്കും.  സെറ്റ് ചെയ്തിരിക്കുന്ന ഏതെങ്കിലും പ്രോപ്പർട്ടിയെ ആർഗ്യുമെന്റുകളുടെ മൂല്യമായി കൊടുക്കുവാൻ സാധിക്കും.

ഒരു ആന്റ് ടാസ്കിന്റെ ഘടന :

```xml
<name attribute1="value1" attribute2="value2" ... />
```

ഇവിടെ name ടാസ്കിന്റെ പേരാണ്, attribute1, attribute2.. എന്നിവ ടാസ്കിന്റെ ഗുണങ്ങൾ അഥവാ ആർഗ്യുമെന്റുകളുടെ പേരും value1, value2.. എന്നിവ അവയുടെ മൂല്യവുമാണ്.

ശരിക്കും ഓരോ ടാസ്‌കിന്റേയും പിന്നിൽ ഒരു ജാവാ ക്ലാസ് പ്രവർത്തിക്കുന്നുണ്ട്. ടാസ്‌കിന്റെ ഗുണങ്ങൾ (attributes/arguements) മനസ്സിലാക്കി അവയ്ക്കനുസൃതമായി ഈ ജാവാ ക്ലാസുകൾ ടാസ്കിൽ  പറഞ്ഞിരിക്കുന്ന ജോലികൾ (കമ്പൈലിങ്ങ്, പക്കേജുകൾ സൃഷ്ടിക്കുക, ടെസ്റ്റ് ചെയ്യുക... എന്നിത്യാദി) ചെയ്യും. സ്വതേ ആന്റിന്റെ കൂടെ കുറേയേറെ ടാസ്കുകൾ ഉണ്ട്, ഇവ കൂടാതെ നമുക്ക് സ്വന്തം ആവശ്യങ്ങൾക്കനുസരിച്ച് ടാസ്കുകൾ സൃഷ്ടിക്കാം ഇതിനായി ആവശ്യമായ ജാവ ക്ലാസുകളും മറ്റും എഴുതിക്കൊടുക്കേണ്ടി വരും.

മുകളിൽ കൊടുത്തിരിക്കുന്ന ബിൽഡ്.എക്സ്‌എംഎൽ ഫയൽ clean,clobber,compile,jar എന്നീ target-ൽ പറഞ്ഞിരിക്കുന്ന പ്രവൃത്തികൾ ചെയ്യുന്നു. അവ എന്താണെന്നു ചെയ്യുന്നതെന്ന് description  ടാഗിൽ കൊടുത്തിട്ടുണ്ട്. jar ടാർഗറ്റ് compile ടാർഗറ്റിനെ ഡിപ്പന്റന്റ് ആയി പ്രഖ്യാപിച്ചിരിക്കുന്നു. ഇതിനർത്ഥം jar എന്ന പ്രവൃത്തി ചെയ്യുന്നതിനു മുൻപ് compile എന്ന പ്രവൃത്തി നിർബന്ധമായും വിജയകരമായി പൂർത്തിയാക്കിയിരിക്കണം എന്നാണ്‌.

## പുറമെ നിന്നുള്ള കണ്ണികൾ
*അപ്പാച്ചെ ആന്റിന്റെ ഔദ്യോഗിക വെബ്സൈറ്റ്
*അപ്പാച്ചെ ആന്റ് വിക്കി 
* വിൻആന്റ് വിൻഡോസ് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങൾക്കുവേണ്ടിയുള്ള ആന്റ് ഇൻസ്റ്റാളർ
*അപ്പാച്ചെ ആന്റിന് ഒരു ആമുഖം  (സ്ലൈഡ് ഷോ)
*ലിൻഗ്വീനി മാപ്‌സ് ഫോർ അപ്പാച്ചെ ആന്റ് - അപ്പാച്ചെ ആന്റ് ബിൽഡ് ഫയലുകളിൽ നിന്നും എളുപ്പത്തിൽ മനസ്സിലാകുന്ന തരത്തിലുള്ള രേഖാചിത്രങ്ങൾ സൃഷ്ടിക്കുവാനുള്ള ലിൻഗ്വീനി മാപ് വിഷ്വലൈസേഷൻ ലൈബ്രറി 
*മെയ്ക് - വളർച്ചയും,പരിണാമവും, ഇതര സോഫ്റ്റ്‌വെയറുകളും 
*ആന്റ്റോ - ആന്റ് സ്ക്രിപ്റ്റുകൾക്കുവേണ്ടിയുള്ള ഒരു പ്രൊഫൈലർ
*ആന്റ് വിക്കിബുക്സിൽ നിന്നും
*ആന്റ് പഠനം
*ഫിങ്ങ് - പി.എച്.പ് വെബ് ആപ്ലിക്കേഷനുകൾക്ക് വേണ്ടിയുള്ള ഒരു ആന്റ് സമാന സോഫ്റ്റ്‌വെയർ

## അവലംബം

വർഗ്ഗം:അപ്പാച്ചെ സോഫ്റ്റ്‌വെയർ ഫൗണ്ടേഷൻ
വർഗ്ഗം:കമ്പൈലിങ്ങ് ടൂളുകൾ
വർഗ്ഗം:എക്സ്.എം.എൽ.