Beispiel für Apache Ant Build Script

In letzter Zeit habe ich viel mit Apache Ant Build-Skripten zu tun. Bei richtiger Konfigurationen bringt Apache Ant einen erheblichen Vorteil bei der Erstellung von Java-Projekten, unabhängig von Betriebssystem und IDE. Um Anfängern den Einstieg in Ant zu erleichtern, habe ich eine Vorlage für eine build.xml mitsamt build.properties erstellt, die beliebig erweitert werden kann.

In NetBeans kann man mit einem Java Free-Form Project das eigene Build-Skript benutzen.

build.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Application properties
app.version=0.1
# Main method of the application
main.class=com.domain.project.MainClass
# Directories generated by init-task
build.dir=build
classes.dir=${build.dir}/classes
# Directories which have to be created manually
src.dir=src
test.dir=test
lib.dir=lib
# Directories generated by init-task
build.dir=build
classes.dir=${build.dir}/classes
jar.dir=${build.dir}/jar
jar.class.path.dir=${jar.dir}/lib
# Directories for documents
docs.dir=docs
javadoc.dir=${docs.dir}/javadoc
# JUnit
reports.dir=reports
junit.dir=${reports.dir}/junit
junit.xml.dir=${junit.dir}/xml
junit.html.dir=${junit.dir}/html

build.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?xml version="1.0" encoding="UTF-8" ?>
<project name="rakete" default="all" basedir=".">
  <description>RAKETE Web server</description>
 
	<!-- Project properties -->
  <property file="build.properties" />
  <path id="class.path">    
    <fileset dir="${lib.dir}" includes="*.jar" />
  </path>
  <path id="jar.file">
    <fileset file="${jar.dir}/${ant.project.name}-${app.version}.jar" />
  </path>
 
	<!-- Compile application -->
  <target name="compile">
    <mkdir dir="${build.dir}" />
    <delete dir="${classes.dir}" />
    <mkdir dir="${classes.dir}" />
    <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true" debuglevel="lines,source" includeantruntime="false">
      <classpath refid="class.path" />
    </javac>
    <javac srcdir="${test.dir}" destdir="${classes.dir}" debug="true" debuglevel="lines,source" includeantruntime="false">
      <classpath refid="class.path" />
    </javac>
  </target>
 
	<!-- Build Java Archive -->
  <target name="jar" depends="compile">
    <delete file="${jar.dir}/${ant.project.name}-${app.version}.jar" />
		<!-- Copy libraries to application's class-path -->
    <copy todir="${jar.class.path.dir}">
      <fileset dir="${lib.dir}" />
    </copy>
		<!-- ManifestClassPath Ant Task -->
    <manifestclasspath property="manifest.class.path" jarfile="{$jar.file}">
      <classpath refid="class.path" />
    </manifestclasspath>
    <jar destfile="${jar.dir}/${ant.project.name}-${app.version}.jar" basedir="${classes.dir}">
      <manifest>
        <attribute name="Main-Class" value="${main.class}" />
        <attribute name="Class-Path" value="${manifest.class.path}" />
      </manifest>
    </jar>
    <echo message="========== Done Building (JAR) ==========" />
  </target>
 
	<!-- Run application -->
  <target name="run" depends="jar">
    <java fork="true" classname="${main.class}">
      <classpath>
        <path refid="class.path" />
        <path refid="jar.file" />
      </classpath>
    </java>
  </target>
 
	<!-- Run tests -->
  <target name="test" depends="compile">
    <mkdir dir="${reports.dir}" />
    <delete dir="${junit.dir}" />
    <mkdir dir="${junit.dir}" />
    <mkdir dir="${junit.xml.dir}" />
    <mkdir dir="${junit.html.dir}" />
    <junit printsummary="yes">
      <classpath location="${classes.dir}" />
      <classpath refid="class.path" />
      <formatter type="xml" />
      <batchtest fork="yes" todir="${junit.xml.dir}">
        <fileset dir="${test.dir}">
          <include name="**/*Test.java" />
        </fileset>
      </batchtest>
    </junit>
		<!-- JUnit reports -->
    <junitreport todir="${junit.xml.dir}">
      <fileset dir="${junit.xml.dir}" includes="TEST-*.xml" />
      <report format="frames" todir="${junit.html.dir}" />
    </junitreport>
  </target>
 
	<!-- Generate Javadoc -->
  <target name="javadoc" description="Generate Javadoc.">
    <mkdir dir="${docs.dir}" />
    <mkdir dir="${javadoc.dir}" />
    <javadoc sourcepath="${src.dir}" classpathref="class.path" destdir="${javadoc.dir}" access="public" version="true" author="true" windowtitle="${ant.project.name} - Version ${app.version}" doctitle="${ant.project.name} - Version ${app.version}" packagenames="*">
    </javadoc>
    <echo message="========== Done Building (Javadoc) ==========" />
  </target>
 
	<!-- Clean application -->
  <target name="clean" description="Remove all files created by the build/test process.">
    <delete dir="${classes.dir}" />
  </target>
 
  <!-- Collective task -->
  <target name="all" depends="javadoc, jar" description="Builds Javadoc and JAR.">
    <echo message="========== Done Building (all) ==========" />
  </target>	
</project>

2 Gedanken zu „Beispiel für Apache Ant Build Script“

  1. Kleiner Hinweis am Rande: Mit einem Semikolon „;“ oder einem Doppelpunkt „:“ lassen sich in einem Ant Build-Skript die Pfade in einer „build.properties“ Datei auch kombinieren.

    Beispiel:
    dir.collection=${build.dir}/classes;${build.dir}/jar

    🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.