|
jsp-develop.de presents: Ant der kleine fleissige Helfer |
| von shark, 25.12.2001 19:05:36 |
|
Ant ist ein Build-Werkzeug, das den gesamten Kompilierungs- und Erstellungsprozess einer Web-Anwendung steuert. C/C++ Entwickler (Java Umsteiger) werden noch das "make" Tool und Makefiles kennen. Keine Angst, mit Ant wird der Build-Prozess einfacher und ein Leer- bzw. Tabulatorzeichen entscheidet nicht mehr darüber, ob ein Projekt erstellt werden kann oder nicht. Ant Build-Dateien liegen im XML-Format vor. Eine Build-Datei besteht aus Targets (Zielen), Tasks (Arbeitsschritten) und Properties (Eigenschaften). Ziele stehen für Teilergebnisse im automatisierten Build-Prozess.Teilergebnisse erfolgen durch die Ausführung von Arbeitsschritten. Ein Arbeitsschritt kann das Kompilieren eines JavaBeans oder ein Kopiervorgang sein. Eigenschaften beinhalten Compiler-Schalter (Compiler Switches) oder Verzeichnisinformationen. Ant ist erweiterungsfähig, sodass der Funktionsumfang durch eigene Tasks in Form von Java-Klassen ergänzt werden kann. Ant ist im Rahmen des Apache Jakarta-Projektes entstanden und kann über folgenden Link erreicht werden: http://jakarta.apache.org/ant Die Ant-Homepage beinhaltet reichhaltige Informationen zur Installation und Konfiguration von Ant. Es lohnt sich Ant zu betrachten, weil es sich zu einem nützlichen Entwicklerwerkzeug gemausert hat. In dem nachfolgenden Beispiel wird ein WEB-Archiv mit Ant auf Basis von Tomcat erzeugt. Das Build Skript ist beispielhaft implementiert worden und setzt folgende Verzeichnisstruktur vorraus: - webapps -- antExample --- src ---- beans ----- example ---- html ---- images ---- jsp ---- Web-inf ----- lib Im "beans" Verzeichnis gibt es ein Unterverzeichnis "example" in dem folgendes JavaBean (AntExample.java) liegt: package beans.example; // AntExample-Bean public class AntExample implements java.io.Serializable { public String getNachricht() { return("AntExampleBean: Hier bin ich ;-)"); } } In dem "jsp" Verzeichnis liegt die Seite "index.jsp": <%@ page language="java" %> <jsp:useBean id="antExample" class="beans.example.AntExample" scope="session"> <html> <head> <title>AntExample</title> </head> <body bgcolor="grey"> <%=antExample.getNachricht()%> </body> </html> Unterhalb des "Web-inf" Verzeichnisses gibt es ein Unterverzeichnis "lib" in dem optional Java-Packages abgelegt werden können. Im "src" Verzeichnis liegt die folgende Build- Datei: <!-- Projekt: Build-Datei fuer antExample Autor : JR Datum : 25.12.2001 --> <project name="ant-example" default="all" basedir="."> <!-- Verzeichnisdefinitionen Dateien, die fuer die Web-Applikation benoetigt werden liegen unterhalb des /src Verzeichnisses. Das Build Skript definiert, dass aus diesen Source Dateien ein komplettes Web-Projekt (Kompilierung und Deployment) erzeugt wird. Diese Sektion muss fuer andere Projekte entsprechend angepasst werden! --> <property name="app.name" value="antExample"/> <property name="src.dir" value="src"/> <property name="app.sub.dir" value="beans/example"/> <property name="webinf.src.dir" value="${src.dir}/WEB-INF"/> <property name="webinf.dest.dir" value="WEB-INF"/> <property name="html.src.dir" value="${src.dir}/html"/> <property name="html.dest.dir" value="."/> <property name="images.src.dir" value="${src.dir}/images"/> <property name="images.dest.dir" value="images"/> <property name="webinf.lib.src.dir" value="${webinf.src.dir}/lib"/> <property name="webinf.lib.dest.dir" value="${webinf.dest.dir}/lib"/> <property name="classes.dest.dir" value="${webinf.dest.dir}/classes"/> <property name="resource.src.dir" value="${src.dir}/${app.sub.dir}"/> <property name="resource.dest.dir" value="${classes.dest.dir}/${app.sub.dir}"/> <property name="jsp.src.dir" value="${src.dir}/jsp"/> <property name="jsp.dest.dir" value="."/> <!-- Umgebungsdefinitionen In dieser Sektion werden servletspezifische Einstellungen vorgenommen. Fuer das vorliegende Projekt beziehen sich die angegebenen Parameter auf Tomcat 4.0.1 (Catalina). Diese Sektion muss fuer andere ServletEngines entsprechend angepasst werden! --> <property environment="env"/> <property name="catalina.home" value="${env.CATALINA_HOME}"/> <property name="servlet.jar" value="${catalina.home}/common/lib/servlet.jar"/> <property name="jaxp.home" value="${env.JAXP_HOME}"/> <property name="dist.src.dir" value="${basedir}/../war"/> <property name="dist.war.dir" value="${basedir}/../war"/> <property name="dist.src" value="${app.name}.zip"/> <property name="dist.war" value="${app.name}.war"/> <!-- Timestamp --> <target name="init"> <tstamp/> </target> <!-- Erzeugen der Verzeichnisstruktur und kopieren der JAR-Dateien in das /lib Verzeichnis. --> <target name="prepare.dirs" depends="init"> <mkdir dir="images"/> <mkdir dir="${webinf.lib.dest.dir}"/> <mkdir dir="${classes.dest.dir}"/> <copy todir="${webinf.lib.dest.dir}"> <fileset dir="${webinf.lib.src.dir}" includes="*.jar"/> </copy> <copy todir="${webinf.lib.dest.dir}"> <fileset dir="${jaxp.home}" includes="*.jar"/> </copy> </target> <!-- Kopieren der HTML-Dateien in das Web-Applikationsverzeichnis --> <target name="dist.html" depends="prepare.dirs"> <copy todir="${html.dest.dir}"> <fileset dir="${html.src.dir}" includes="*.html"/> </copy> </target> <!-- Kopieren der Bild-Dateien in das Web-Applikationsverzeichnis --> <target name="dist.images" depends="prepare.dirs"> <copy todir="images"> <fileset dir="${images.src.dir}" includes="*.gif"/> </copy> </target> <!-- Kopieren der JSP-Dateien in das Web-Applikationsverzeichnis --> <target name="dist.jsp" depends="prepare.dirs"> <copy todir="${jsp.dest.dir}"> <fileset dir="${jsp.src.dir}" includes="*.jsp"/> </copy> </target> <!-- Kopieren der Property-Dateien in das Web-Applikationsverzeichnis --> <target name="dist.prop" depends="prepare.dirs"> <copy todir="${resource.dest.dir}"> <fileset dir="${resource.src.dir}" includes="*.properties"/> </copy> </target> <!-- Kompilieren --> <target name="compile" depends="init,prepare.dirs"> <javac srcdir="src" destdir="${classes.dest.dir}" classpath="${servlet.jar}" debug="true" optimize="false" deprecation="true"/> </target> <!-- Build All --> <target name="dist" depends="dist.html,dist.images,dist.jsp,dist.prop"> </target> <!-- Build All und JSP-Seiten kopieren --> <target name="all" depends="dist,compile"> </target> <!-- Build WEB-Archiv (war file) --> <target name="dist.war" depends="all"> <jar jarfile="${dist.war.dir}/${dist.war}" basedir="${basedir}" excludes="src/**"/> </target> <!-- Loesche JSP-Seiten --> <target name="clean.jsp" depends="init"> <delete> <fileset dir="${jsp.dest.dir}" includes="*.jsp"/> </delete> </target> <!-- Loesche HTML-Seiten --> <target name="clean.html" depends="init"> <delete> <fileset dir="${html.dest.dir}" includes="*.html"/> </delete> </target> <!-- Loesche Bild-Dateien --> <target name="clean.images" depends="init"> <delete dir="${images.dest.dir}"/> </target> <!-- Loesche Archiv-Dateien --> <target name="clean.dist" depends="init"> <delete file="${dist.src.dir}/${dist.src}"/> <delete file="${dist.war.dir}/${dist.war}"/> </target> <!-- Loesche alle Dateien --> <target name="clean" depends="init,clean.images,clean.html,clean.jsp,clean.dist"> <delete dir="${webinf.dest.dir}"/> </target> <!-- Beschreibung der Targets --> <target name="options"> <echo message="**********************************************************"/> <echo message="* Targets ${app.name} Build-Skript."/> <echo message="**********************************************************"/> <echo message="* "/> <echo message="**** Kopieren und Archiv Targets ****"/> <echo message="* "/> <echo message="* Target Beschreibung"/> <echo message="* ====== ========================================="/> <echo message="* dist.html - Kopiert HTML Dateien in '${html.src.dir}' zu '${html.dest.dir}'"/> <echo message="* dist.images - Kopiert Bild-Dateien in '${images.src.dir}' zu '${images.dest.dir}'"/> <echo message="* dist.jsp - Kopiert JSP-Dateien in '${jsp.src.dir}' zu '${jsp.dest.dir}'"/> <echo message="* dist.prop - Kopiert Property-Dateien"/> <echo message="* in '${resource.src.dir}'"/> <echo message="* zu '${resource.dest.dir}'"/> <echo message="* dist - Fuehrt alle dist Targets aus"/> <echo message="* dist.war - Erzeugt WEB-Archiv (war file) "/> <echo message="* "/> <echo message="**** Loeschen Targets ****"/> <echo message="* "/> <echo message="* Target Beschreibung"/> <echo message="* ====== ========================================="/> <echo message="* clean.jsp - Loesche JSP-Dateien von '${jsp.dest.dir}'"/> <echo message="* clean.html - Loesche HTML-Dateien von '${html.dest.dir}'"/> <echo message="* clean.images - Loesche Bild-Dateien von '${images.dest.dir}'"/> <echo message="* clean.dist - Loesche WAR-Archiv"/> <echo message="* clean - Fuehre alle Loeschen-Targets aus"/> <echo message="* "/> <echo message="**** Build Targets ****"/> <echo message="* "/> <echo message="* Target Beschreibung"/> <echo message="* ====== ========================================="/> <echo message="* compile - Kompilieren der Java-Dateien in '${classes.dest.dir}'"/> <echo message="* all - Build All"/> <echo message="* Target nicht definiert"/> <echo message="**********************************************************"/> </target> </project> Der Build-Prozess wird durch Starten von Ant im "src" Verzeichnis ausgelöst. Das Build-Skript ist so entwickelt worden, dass Ant automatisch das Build-Target ausführt. Es muss also in einer Shell nur in das Web-Verzeichnis des Projektes gewechselt und "ant" eingegeben werden. Nach Betätigung der Return-Taste wird der Build-Prozess angestossen. Das WEB-Archiv erzeugt man durch die Eingabe des Kommandos: "ant dist.war" Abschliessend bleibt noch zu sagen, dass für komplexe Web- und EJB-Projekte Ant unentbehrlich ist, weil die Konfiguration und das Deployment über graphische Administrationskonsolen zwar relativ einfach aber oftmals auch sehr langsam ist. Ein Build-Durchlauf, bei dem am Ende ein Stück lauffähige Software rauskommt, hat nicht nur für komplexe Projekte etwas mit Magie zu tun. |
|
URL dieses Beitrags: http://www.jsp-develop.de/forumbeitrag/view/555/ |