Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Ant & Jar Ant – Java-based build tool Jar – pkzip archive, that contains metadata (a manifest file) that the JRE understands jar Use jar utility to create jar files A compressed, tar'd collection of *.class files Command format like tar File format pkzip, but includes a manifest file MANIFEST.MF (meta-data) Can be added to classpath; JRE searches a jarfile like a directory, for included packages Creating a jarfile Options much like tar c – create x – extract u – update Others v – verbose f – specify archive filename m – include manifest info from named file Creating a jarfile - example Given class files: pokerSuit.class, pokerClient.class Create the jarfile: $ jar cvf poker.jar poker*.class You can use unzip -l to look at the contents. Notice the MANIFEST.MF: Archive: poker.jar Length Date Time -------------0 08-06-06 09:30 120 08-06-06 09:30 670 08-06-06 09:19 636 08-06-06 09:19 -------1426 Name ---META-INF/ META-INF/MANIFEST.MF pokerClient.class pokerSuit.class ------4 files Executing a jarfile Jar files can be made executable by adding a Main-Class line to the manifest, and identifying the class that contains main create an mf file (poker.mf) w/these lines: Classpath: ./poker.jar Main-Class: pokerClient Create the jarfile w/this info: $ jar cvfm poker.jar poker.mf *.class To run: java –jar poker.jar Ant A bit like Make Cross-platform Extended w/Java classes, rather than shelldependent scripts Reads XML configuration files Java-based Open source Why another build tool? Make tools are shell based Development across multiple platforms Ant vs Make Ant is Cross Platform Ant will work on any platform that has a Java VM. Make relies on specific OS shell commands Syntax Make has a scary looking syntax Make tab problem Ant uses XML self documenting Efficiency Ant PROs Fast Compiles Platform Independent Easier to use than make CONs non-Java projects Who should use Ant? Use Ant If you don’t already know make If you are developing anything cross platform Use Make – – If you are a make expert. Developing applications in nonJava language. Resources Ant : the definitive guide ISBN: 0596001843 Java tools for eXtreme Programming ISBN: 047120708X Electronic resource Ant add-ons: http://ant.apache.org/external. html Links http://ant.apache.org/ http://ant.apache.org/resources.html http://ant.apache.org/manual/index.html Nice description of the various tags/tasks Key Words Build File Collection of targets (hopefully logical) Target Collection of tasks Can have dependencies (other targets, etc.) Task Specific commands for building, running, etc Ant Details All Ant tasks are defined in a Java class An example of a particular task would be JAVADOC (see common built-in tasks, later) Ant has a core set of tasks that come with it. Other optional tasks can be downloaded. Ant is very modularized. build.xml The default build file Ant looks for -f option allows to specify a different build file How to run ant ant [-f file] [target*] file – config file (build.xml if not supplied) target* - list of targets to be built E.g.: $ ant test $ ant $ ant compile If you don’t specify, the default is executed $ ant javadoc $ ant compile javadoc build.xml Example <project default="compile"> <target name="compile"> <javac srcdir="." /> </target> </project> Simply compiles all *.java files in the current directory (calls javac) Complex ant build file example <project default="all"> <property name="obj-dir" location="obj" /> <property name="lib-dir" location="lib" /> <property name="src-dir" location="src" /> <target name="init"> <mkdir dir="${obj-dir}" /> <mkdir dir="${lib-dir}" /> </target> <target name="clean-init"> <delete dir="${obj-dir}" /> <delete dir="${lib-dir}" /> </target> <target name="compile" depends="init"> <javac srcdir="${src-dir}" destdir="${obj-dir}" /> </target> <target name="clean-compile"> <delete> <fileset dir="${obj-dir}" includes="**/*.class" /> </delete> </target> Complex example (cont.) <target name="jar" depends="compile"> <jar destfile="${lib-dir}/hello.jar" basedir="${objdir}" /> </target> <target name="clean-jar"> <delete file="${lib-dir}/hello.jar" /> </target> <target name="run" depends="jar"> <java classname="hello" classpath="${lib-dir}/hello.jar" fork="true" /> </target> <target name="all" depends="run"/> <target name="clean" depends="clean-init"/> </project> Ant Setup Ant is installed in /usr/local/bin/ant JAVA_HOME variable should be set should be set to prefix of /bin/java On the CS machines: /usr/local OR /opt/java5/jdk1.5.0_06/ Common Ant Tasks <javac srcdir=dir [includes=fileList]/> compiles Java source files <java classname=class/> OR <java fork='yes' jar=jar/> runs a Java application javadoc generates javadoc HTML file from Java source files mkdir creates a directory and any missing parent directories Common Tasks (cont) move moves files and directories to a new directory <copy file=src (tofile=dest | todir=destDir) /> copies files <delete (file=file | dir=dir ) /> deletes given file or dir <echo [file=file] message=msg/> or <echo [file=file]>msg</echo> outputs a message to System.out or file Common Ant Tasks (cont.) Gunzip unzips a GZIP file Gzip creates a GZIP file from a file Jar creates a JAR file from a set of files Mail sends email using SMTP Get creates a copy of a remote file at a specified URL can use http and ftp URLs Extra Tasks JUnit runs JUnit tests requires junit.jar from http://junit.org FTP lists, gets, puts and deletes files on an FTP server requires NetComponents.jar Examples Given files foo.java, which extends bar.java, in the current directory compile all java files in directory: <project default="compile"> <target name="compile"> <javac srcdir="." /> </target> </project> Example compile only foo and bar: <project default="compile"> <target name="compile" depends='foo,bar'/> <target name="foo" depends='bar'> <javac srcdir='./' includes='foo.java'/> </target> <target name="bar"> <javac srcdir='./' includes='bar.java'/> </target> </project> Example Add a "clean" target <target name="clean"> <delete> <fileset dir="./"> <include name='*.class'/> </fileset> </delete> </target> Example Add a "run" target: <target name="run" depends='compile'> <java classname='foo'/> </target> Example Add a target to build a jarfile: <target name="jar" depends='compile'> <jar destfile='./foo.jar' manifest='man.mf'> <fileset dir='./'> <include name='*.class'/> </fileset> </jar> </target> Example Run the jarfile: <target name="run" depends='jar'> <java jar='foo.jar' fork='true'/> </target>