Ant Buildfile

Aus Infostudium Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Beispiel-Datei für eine Java-Webapplication

Verzeichnisstruktur

/pfadzumproject/build.xml
/pfadzumproject/src/
/pfadzumproject/etc/
/pfadzumproject/etc/project.conf
/pfadzumproject/lib/
/pfadzumproject/web/
/pfadzumproject/web/META-INF/
/pfadzumproject/web/META-INF/MANIFEST.MF
/pfadzumproject/web/WEB-INF/
/pfadzumproject/web/WEB-INF/web.xml

build.xml Datei

<project name="SPGS0506-WfMS" default="compile" basedir=".">

	<property file="${basedir}/etc/project.conf" />

	<property environment="env" />

	<condition property="tomcat.home.local" value="${env.TOMCAT_HOME_LOCAL}">
		<available file="${env.TOMCAT_HOME_LOCAL}" type="dir" />
	</condition>

	<condition property="tomcat.home.local" value="${env.TOMCAT_HOME}">
		<available file="${env.TOMCAT_HOME}" type="dir" />
	</condition>

	<condition property="tomcat.home" value="${env.TOMCAT_HOME}">
		<available file="${env.TOMCAT_HOME}" type="dir" />
	</condition>

	<condition property="tomcat.home" value="${env.CATALINA_HOME}">
		<available file="${env.CATALINA_HOME}" type="dir" />
	</condition>


	<property name="project.input" 				location="${basedir}" />
	<property name="project.output" 			location="${basedir}" />

	<property name="project.build" 				location="${project.output}/build" />
	<property name="project.output.classes" 	location="${project.build}/classes" />
	<property name="project.output.jars" 		location="${project.build}/jars" />
	<property name="project.output.warfiles" 	location="${project.build}/${app.name}" />

	<property name="project.input.src" 			location="${project.input}/src" />
	<property name="project.input.warfiles" 	location="${project.input}/web" />
	<property name="project.input.webinf" 		location="${project.input.warfiles}/WEB-INF" />
	<property name="project.input.externlibs" 	location="${project.output}/lib" />

	<property name="project.inputlib.servlet" 	location="${tomcat.home}/common/lib/servlet-api.jar" />

	<property name="excludes" value="**/CVS/*,**/.nbattrs,**/.project,**/.classpath" />
	<property name="java.target.version" value="1.5" />
	<property name="java.source.version" value="1.5" />


	<path id="classpath">
		<pathelement path="${java.class.path}" />
		<pathelement location="${tomcat.home}/common/lib/servlet-api.jar" />
		<fileset dir="lib">
			<include name="**/*.jar" />
		</fileset>
	</path>

	<target name="init">

		<!-- überprüfen, ob externe Libraries vorhanden sind -->
		<condition property="libsAvailable">
			<and>
				<available file="${project.inputlib.servlet}" />
			</and>
		</condition>

		<tstamp>
			<format property="timestamp" pattern="yyyy.MM.dd-HH.mm" />
		</tstamp>
		<property name="version.number" value="${env.USERNAME}_${timestamp}" />

		<echo message="Building project ${version.number}" />
		<echo message=" " />
		<echo message="project input directory is: ${project.input}" />
		<echo message="project output directory is: ${project.output}" />
		<echo message="Java version detected: ${ant.java.version}" />
		<echo message="Java home is: ${env.JAVA_HOME}" />
		<echo message="Tomcat home is: ${tomcat.home}" />
	</target>

	<target name="checklibs" depends="init" unless="libsAvailable">

		<fail>
	        
	Error: Some of the required libraries are not available.

	To compile ${app.name}, you need the following libaries:
	${project.inputlib.servlet}

	    </fail>
	</target>

	<target name="clean" description="Delete existing ouput directories">

		<delete dir="${project.output.warfiles}" />
		<delete dir="${project.build}" />
	</target>


	<target name="compile" depends="checklibs" description="Compile the project classes">

		<mkdir dir="${project.output.classes}" />

		<uptodate property="classesUpToDate" targetfile="${project.output.jars}/${app.name}.jar">
			<srcfiles dir="${project.input.src}" includes="**/*.java" excludes="${build.excludes},${excludes}" />
			<srcfiles dir="${project.input.src}" includes="**/*.properties,**/*.txt,**/*.xml,**/*.xsd,**/*.dtd,**/*.sql" excludes="${excludes}" />
		</uptodate>

		<javac srcdir="${project.input.src}" destdir="${project.output.classes}" excludes="${build.excludes}" classpath="${project.inputlib.servlet}" debug="on" optimize="on" deprecation="on" source="${java.source.version}" target="${java.target.version}">
			<classpath refid="classpath" />
		</javac>

		<copy todir="${project.output.classes}">
			<fileset dir="${project.input.src}" includes="**/*.properties,**/*.txt,**/*.xml,**/*.xsd,**/*.dtd,**/*.sql" excludes="${excludes}" />
		</copy>

	</target>


	<target name="jar" depends="compile" description="Generate the project .jar files">

		<mkdir dir="${project.output.jars}" />

		<jar jarfile="${project.output.jars}/${app.name}.jar" basedir="${project.output.classes}">
			<metainf dir="${project.input.warfiles}/WEB-INF" includes="project.tld" />
		</jar>
	</target>


	<target name="war" depends="jar" description="Builds the project.war">

		<war destfile="${project.build}/${app.name}.war" webxml="${project.input.warfiles}/WEB-INF/web.xml" manifest="${project.input.warfiles}/META-INF/MANIFEST.MF">

			<lib dir="${project.output.jars}">
				<include name="*.jar" />
			</lib>
			<fileset dir="${project.input.warfiles}">
				<exclude name="WEB-INF/web.xml" />
				<exclude name="build.xml,.*,${excludes}" />
			</fileset>
		</war>
	</target>

	<target name="tomcat.deploy" depends="war" description="Copy war file into tomcat webapp dir">
		<copy todir="${tomcat.home.local}/webapps/">
			<fileset dir="${project.build}/">
				<include name="**/*.war" />
			</fileset>
		</copy>
	</target>

</project>

project.conf

version.number=0.1
app.name=Uebung04

Hier werden die projektspezifischen Einstellungen vorgenommen. So kann die build.xml für mehrere Projekte verwendet werden.

Erläuterungen

Diese build.xml Datei verfügt über folgende Targets:

  • init
  • checklibs
  • compile
  • clean
  • jar
  • war
  • tomcat.deploy

Zu Anfangs wird versucht, das Tomcat/Catalina Verzeichnis zu suchen. Daher sollte diese ant-Datei ohne zusätzliche Parameter beim Aufruf auskommen und sollte sowohl zuhause, als auch im CIP-Planschbecken laufen.

checklibs überprüft, ob alle nötigen Bibliotheken vorhanden sind.

compile kompiliert die java-Dateien nicht in ein classes- oder bin-Verzeichnis, sondern in ein build-Verzeichnis, welches im Projekt angelegt wird.

jar packt die class-Dateien in eine jar-Datei

war packt die jsp, jar und xml-Dateien in eine war-Datei.

tomcat.deploy kopiert die war-Datei ins Tomcat-webapps-Verzeichnis