|
|
|
Ant der kleine fleissige Helfer

|
| von shark, 25.12.2001 19:05:36 |
    (10 votes) [vote] |
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. |
|
|
Hinweis: Auf dieser Seite liegen Links zu anderen Seiten im Internet. Für alle diese Links gilt: Wir
betonen ausdrücklich, daß wir keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten
haben. Deshalb distanzieren wir uns hiermit ausdrücklich von allen Inhalten aller gelinkten Seiten auf
dieser Homepage und machen uns ihre Inhalte nicht zueigen. Diese Erklärung gilt für alle auf unserer
Homepage angebrachten Links
Redaktion/Betreiber von JSP-Develop übernehmen keinerlei Gewährleistung und Verantwortung für die Richtig-
und/oder Vollständigkeit von den auf den Webseiten JSP-Develop veröffentlichten Source Codes.
Die Verantwortung der Verwendung/Anwendung sowie etwaige Modifikation der hier veröffentlichten Sourcen
obliegt einzig dem Benutzer der Webseite, welche die veröffentlichten Sourcen in einer Applikation/Anwendung
einsetzt. Durch das Kopieren und/oder Benutzen der Sourcen in einer Applikation/Anwendung
bzw. etwaigen Abschriften wird dieser Rechtshinweis anerkannt.
Java, JSP, JavaServer Pages, J2EE, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and in other countries.
IBM, WebSphere are trademarks or registered trademarks of International Business Machines Corporation.
Other trademarks and registered trademarks are the property of their respective owners.
|
|
|
|