Lecture1Ant - Andrew.cmu.edu

Download Report

Transcript Lecture1Ant - Andrew.cmu.edu

Introduction to ANT
• Written by James Duncan Davidson
• Like GNU Make but specifically for Java
• Good for bundling and delivery of groups of classes, jars, wars
• Handles dependencies automatically
• Written in XML
• Works on Unix or Windows
• Available from Apache.org
1
Ant programs are XML
documents
The meaning of the tags is not defined by XML.
XML documents can be programs (we’ll see this again
with XSLT).
The software that reads the Ant documents does two
things:
-- parses the document (already available to the
creator of Ant)
-- interprets and executes Ant tasks based on
agreed upon semantics
2
Some Ant Notes
•
•
•
•
•
•
•
•
•
•
Exactly on project element is required
There may be many properties, targets and tasks
At least on target is required
Targets describe broad goals
Tasks are nested within targets
Over 100 core tasks available (e.g. mkdir, javac)
Properties are name-value pairs
Ant interprets the build file with a breadth first traversal
across the XML elements under project
Inside a target, Ant performs a depth first traversal
By default, Ant breaks at the first error
3
First Example build.xml
<?xml version="1.0"?>
<project basedir="." default="run">
<target name="compile">
<javac srcdir="."
destdir="."
classpath="."
/>
</target>
<target name="run" depends="compile">
<java classname="MyJava" />
</target>
</project>
4
MyJava.java
public class MyJava {
public static void main(String a[]) {
System.out.println("Hello world");
}
}
5
Ant Execution
D:\McCarthy\www\95-733\examples\ant2>ant
Buildfile: build.xml
compile:
[javac] Compiling 1 source file to D:\McCarthy\www\95-733
\examples\ant2
run:
[java] Hello world
BUILD SUCCESSFUL
Total time: 17 seconds
6
Second Example build.xml
examples
|
--- antdir
|
|
|
--- SomeCoolClass.class
|
--- SomeCoolClass.java
--- ant2
|
--- build.xml
--- MyClass.java
7
SomeCoolClass.java
D:\McCarthy\www\95-733\examples\antdir>
type SomeCoolClass.java
public class SomeCoolClass {
int x;
public SomeCoolClass() { x = 3; }
public int getX() { return x; }
}
8
MyJava.java
D:\McCarthy\www\95-733\examples\ant2>type MyJava.java
public class MyJava {
public static void main(String a[]) {
SomeCoolClass p = new SomeCoolClass();
System.out.println("Hello world x == " + p.getX());
}
}
9
build.xml
D:\McCarthy\www\95-733\examples\ant2>type build.xml
<?xml version="1.0"?>
<project basedir="." default="run">
<target name="compile">
<javac srcdir="."
destdir="." >
<classpath>
<pathelement path="../antdir/"/>
<pathelement path="."/>
</classpath>
</javac>
</target>
10
build.xml (Continued)
<target name="run" depends="compile">
<java classname="MyJava">
<classpath>
<pathelement path="../antdir/"/>
<pathelement path="."/>
</classpath>
</java>
</target>
</project>
11
Ant Exceution
D:\McCarthy\www\95-733\examples\ant2>ant
Buildfile: build.xml
compile:
run:
[java] Hello world x == 3
BUILD SUCCESSFUL
Total time: 3 seconds
12
Same Example Different
build.xml
<?xml version="1.0"?>
<project basedir="." default="run">
<path id="project.class.path">
<pathelement path="."/>
<pathelement path="../antdir/"/>
</path>
<target name="compile">
<javac srcdir="." destdir="." >
<classpath refid="project.class.path"/>
</javac>
</target>
13
<target name="run" depends="compile">
<java classname="MyJava">
<classpath refid="project.class.path"/>
</java>
</target>
</project>
14
Ant Example from “Ant The
Definitive Guide” O’reilly
15
Initial Layout
D:\McCarthy\www\95-733\examples\ant>tree /f
Directory PATH listing
Volume serial number is 0012FC94 486D:D392
D:.
│ build.xml
│
└───src
└───com
└───oreilly
└───sample
Account.java
Person.java
PersonTest.java
16
After ant all
D:.
│ build.xml
│
├───build
│ ├───classes
│ │ └───com
│ │
└───oreilly
│ │
└───sample
│ │
Account.class
│ │
Person.class
│ │
PersonTest.class
│ │
│ └───lib
│
orielly.jar
17
After ant all (continued)
│
└───src
└───com
└───oreilly
└───sample
Account.java
Person.java
PersonTest.java
18
build.xml
<?xml version="1.0" ?>
<!-- build.xml -->
<project name = "Simple BuildFile" default="compile" basedir=".">
<!-- the directory containing source code -->
<property name = "src.dir" value = "src" />
<!-- Temporary build directories -->
<property name = "build.dir" value = "build" />
19
<property name = "build.classes" value = "${build.dir}/classes" />
<property name = "build.lib" value = "${build.dir}/lib" />
<!-- Target to create the build directories prior to compile -->
<target name = "prepare">
<mkdir dir= "${build.dir}" />
<mkdir dir= "${build.classes}" />
<mkdir dir= "${build.lib}" />
</target>
<target name = "clean" description = "Remove all generated files." >
<delete dir ="${build.dir}" />
</target>
20
<target name = "compile" depends = "prepare"
description = "Compiles all source code." >
<javac srcdir = "${src.dir}" destdir= "${build.classes}" />
</target>
<target name = "jar" depends = "compile"
description = "Generates oreilly.jar in the 'dist' directory. ">
<!-- exclude the test class from the jar file -->
<jar jarfile="${build.lib}/orielly.jar"
basedir="${build.classes}"
excludes = "**/*PersonTest.class" />
</target>
<target name = "all" depends = "clean,jar"
description = "Cleans, compiles, then builds the Jar file." />
21
</project>