220 likes | 240 Views
Learn Ant concepts, create projects, compile and run Java code with Eclipse. Includes hands-on examples and tips for efficient Java building with Ant. Explore Ant's powerful features in Java development.
E N D
Lecture 2A 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. • Built in to Eclipse.
Ant Concepts • 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.
“Hello World” In Ant <?xml version="1.0" encoding="UTF-8"?> <projectname="Hello OCT"default="Both"basedir="."> <propertyname="HelloText"value="Hello"/> <propertyname="HelloOCT"value="OCT"/> <targetname="Hello"> <echo>${HelloText}</echo> </target> <targetname="OCT"> <echo>${HelloOCT}</echo> </target> <targetname="Both"depends="Hello,OCT"/> </project>
Using Ant with Eclipse Create a Workspace and a Project. Right click the project and select new file. Enter text for build.xml. Save. Right click the file and run as Ant build.
Java 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>
MyJava.java public class MyJava { public static void main(String a[]) { System.out.println("Hello world"); } }
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
Another Java Example build.xml The build file needs to compile MyClass.java and needs SomeCoolClass in its classpath. examples | --- antdir | | | --- SomeCoolClass.class | --- SomeCoolClass.java --- ant2 | --- build.xml --- MyClass.java
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; } }
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()); } }
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>
build.xml (Continued) <target name="run" depends="compile"> <java classname="MyJava"> <classpath> <pathelement path="../antdir/"/> <pathelement path="."/> </classpath> </java> </target> </project>
Ant Execution D:\McCarthy\www\95-733\examples\ant2>ant Buildfile: build.xml compile: run: [java] Hello world x == 3 BUILD SUCCESSFUL Total time: 3 seconds
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>
<target name="run" depends="compile"> <java classname="MyJava"> <classpath refid="project.class.path"/> </java> </target> </project>
Ant Example from “Ant The Definitive Guide” O’reilly Problem: We have source code in a Java package. We want to create a build directory with class files. We want to place the build directory in a Java archive.
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
After ant all D:. │ build.xml │ ├───build │├───classes ││└───com ││└───oreilly ││└───sample ││ Account.class ││ Person.class ││ PersonTest.class ││ │└───lib │ orielly.jar
After ant all (continued) │ └───src └───com └───oreilly └───sample Account.java Person.java PersonTest.java
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" />
<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>
<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." /> </project>