2.3. Opsætningsstyring

Når du skal til at lave større og mere komplekse softwaresystemer, så vil du opdage at de består af mange forskellige delkomponenter. Delkomponenter vil i de fleste tilfælde være softwaremoduler med bestemte versionsnumre, men det kan også være brugervejledninger eller datafiler, som er knyttet til det pågældende softwaresystem.

Den proces at sammensætte komponenter så de udgør et softwaresystem kaldes for konfigurering og kan være en omfattende og ret så kedelig arbejdsopgave at udføre manuelt når man skal holde styr på 117 forskellige filer med bestemte versionsnumre og deres indbyrdes afhængigheder.

Heldigvis findes der værktøjer som er skræddersyet til konfigureringsstyring og vi vil i dette afsnit beskrive et værktøj, der er møntet specielt mod konfigurering af Java-softwaresystemer.

2.3.1. Ant

Ant er et Java-baseret værktøj. Ant kan hentes fra: http://jakarta.apache.org/ hvor man desunden kan finde yderligere dokumentation og information.

2.3.1.1. Typisk bibliotekslayout

TODO...skriv om motivationen for nedenstående layout /jk

projektnavn              Al projektrelateret data
projektnavn/build        Oversatte class-filer, ressourcefiler og billeder
projektnavn/dist         Binær distribution af softwaresystemet inkl. manualer osv.
projektnavn/docs         Al dokumentation
projektnavn/docs/api     JavaDoc-genereret HTML af din kode
projektnavn/lib          Eksterne jar-filer, som anvendes i projektet
projektnavn/log          Logfiler
projektnavn/src          Kildetekst, ressourcefiler og billeder
projektnavn/test/lib     Eksterne jar-filer, som anvendes til test
projektnavn/test/report  Testrapporter
projektnavn/test/src     Kildetekst relateret til test af softwaresystemet

2.3.1.2. Opsætningsfil

Nedenstående er vist et eksempel på en opsætningsfil til Ant som benytter ovenstående layout. For at anvende build.xml skal man kopiere build.xml til projekt katalog som man har valgt til dette project. Man kan benytte:

  • ant init til at oprette ovenstående katalog struktur

  • ant compile til at oversætte kildeteksten

  • ant dist til at oprette en jar fil med klasse filerne

  • ant clean sletter katalogerne dist og build

  • ant doc til at generer javadoc. Du til skal dog erstatte dk.cmm.* med dine egne pakker

Man kan utroligt mange forskellige ting med Ant. Lige fra at komplilere sin kildetekst, til at køre java-programmer, til test, til ftp med mere. I stedet for at lave sine egne scripts kan det anbefales at man ser på dokumentationen til Ant og finder den rette task således at man har samlet projektets opsætning på et sted.

<project name="antEksempel" default="compile" basedir=".">

<description>
  Eksempel paa Ant build.xml
</description>

<property name="name"       value="antEksempel"/>
<property name="packages"   value="dk.cmm.*"/>

<property name="build"      value="build"/>
<property name="dist"       value="dist"/>
<property name="docs"       value="docs"/>
<property name="api"        value="${docs}/api"/>
<property name="log"        value="log"/>
<property name="src"        value="src"/>
<property name="lib"        value="lib"/>
<property name="test"       value="test"/>
<property name="testlib"    value="${test}/lib"/>
<property name="testreport" value="${test}/report"/>
<property name="testsrc"    value="${test}/src"/>

<target name="init">    
   <tstamp/>

   <mkdir dir="${build}"/>
   <mkdir dir="${dist}"/>
   <mkdir dir="${docs}"/>
   <mkdir dir="${api}"/>
   <mkdir dir="${log}"/>
   <mkdir dir="${lib}"/>
   <mkdir dir="${src}"/>
   <mkdir dir="${test}"/>
   <mkdir dir="${testlib}"/>
   <mkdir dir="${testreport}"/>
   <mkdir dir="${testsrc}"/>
</target>

<path id="classpath">
   <fileset dir="lib">
      <include name="**/*.jar"/>
   </fileset>
</path>

<target name="compile" 
        depends="init" 
        description="compile the source " >
    <javac srcdir="${src}" 
           destdir="${build}"
           classpathref="classpath"/>
</target>

<target name="dist" 
        depends="compile" 
        description="Generates a jar file" >
    <jar jarfile="${dist}/${appName}-${DSTAMP}.jar" basedir="${build}"/>
</target>

<target name="clean"
        description="clean up" >
    <!-- Delete the ${build} and ${dist} directory trees -->
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
</target>

<target name="doc"
        description="generates api documentation">
   <javadoc packagenames="${packages}"
            destdir="${api}"
            sourcepath="src"/>
</target>

</project>