Transcript CVS / Ant
CMSC 341
Java Packages
Ant
CVS
Project Submission
July 2011
CMSC 341 CVS/Ant
1
Packages
• Java packages create libraries
– A group of classes organized together into a
single namespace.
– Allows multiple classes with the same name
• MyPackage.Stack
• YourPackage.Stack
July 2011
CMSC 341 CVS/Ant
2
Packages
• A file may belong to only one package.
• Packages serve as a namespace in Java and
create a directory hierarchy when compiled.
• Classes are placed in a package using the
following syntax in the first line that is not a
comment.
package packagename;
package packagename.subpackagename;
July 2011
CMSC 341 CVS/Ant
3
Multiple Stack Classes
// My stack.java file
package MyPackage;
public class Stack
{
// …
};
// Your stack.java file
package YourPackage;
public class Stack
{
// …
};
July 2011
CMSC 341 CVS/Ant
4
Packages (cont.)
• The fully qualified name of a class is the
packageName.ClassName.
java.lang.String
MyPackage.Stack
YourPackage.Stack
• To alleviate the burden of using the fully qualified
name of a class, use an import statement before the
class declaration.
import
import
import
import
July 2011
java.util.StringBuffer;
java.util.*;
MyPackage.Stack;
YourPackage.*;
CMSC 341 CVS/Ant
5
Packages (cont.)
• It is common practice to duplicate the package directory
hierarchy in a directory named src and to compile to a
directory named bin.
• Create this directory manually in your GL account
– Eclipse creates this directory structure for you
Project1
Root of project directory tree
src
proj1
Package name
Example.java
proj1
Package name
bin
Example.class
July 2011
CMSC 341 CVS/Ant
6
Compiling with packages
• When using the Unix command line, classes in a package are
compiled using the –d option.
• Given the directory structure on the previous slide, run the
command below from the src directory to compile the code
from the Project1/src directory to the Project1/bin
directory.
• The -d switch tells the compiler where to place the .class file
• The bin directory must exist before compiling. The compiler
will create the proj1 directory under bin.
javac –d ../bin proj1/Example.java
July 2011
CMSC 341 CVS/Ant
7
Packages and Eclipse
• By default Eclipse automatically creates a
src/ directory when you create a new Java
Project
• Eclipse will then automatically create a bin/
directory and associated package directory
hierarchy when it compiles your Java classes
– Note: the bin/ directory tree is hidden by Eclipse
when in the Java perspective, but you can see it if
viewing the file system.
July 2011
CMSC 341 CVS/Ant
8
What is Ant?
Ant is a Java based tool for automating the build process
Platform independent commands (works on Windows,
Mac & Unix)
XML based format
Easily extendable using Java classes
Ant is an open source (free) Apache project
Ant files used in this course require the package
directory structure described earlier
July 2011
CMSC 341 CVS/Ant
9
Anatomy of a Build File
Ant’s build files are written in XML
Each build file contains
A project
At least 1 target
Targets are composed of some number of tasks
Build files may also contain properties
Convention is to call file build.xml
Like macros in a make file
Comments are within <!-- --> blocks
July 2011
CMSC 341 CVS/Ant
10
Projects
The project tag is used to define the project
to which the ANT file applies
Projects tags typically contain 3 attributes
name – a logical name for the project
default – the default target to execute
basedir – the base directory relative to which all
operations are performed
Additionally, a description for the project can
be specified from within the project tag
July 2011
CMSC 341 CVS/Ant
11
Project tag
<project name="Sample Project" default="compile"
basedir=".">
<description>
A sample build file for this project
Recall that “.” (dot) refers to the current
directory
</description>
</project>
July 2011
CMSC 341 CVS/Ant
12
Properties
Build files may contain constants (known as
properties) to assign a value to a variable which can
then be used throughout the project
Makes maintaining large build files more manageable and
easily changeable
Projects can have a set of properties
• Property tags consist of a name/value pair
Use the property names throughout the build file
The value is substituted for the name when the build file is
“executed”
July 2011
CMSC 341 CVS/Ant
13
Build File with Properties
<project name="Sample Project" default="compile"
basedir=".">
<description>
A sample build file for this project
</description>
<!-- global properties (constants) for this build
file -->
<property name="source.dir" location="src"/>
<property name="build.dir" location="bin"/>
<property name="doc.dir" location="doc"/>
</project>
July 2011
CMSC 341 CVS/Ant
14
Tasks
A task represents an action that needs execution
Tasks have a variable number of attributes
which are task dependant
There are a number of built-in tasks, most of
which are things which you would typically do as
part of a build process
mkdir - create a directory
javac - compile java source code
java - execute a Java .class file
javadoc - run the javadoc tool over some files
And many, many others…
July 2011
For a full list see:
http://ant.apache.org/manual/tasksoverview.html
CMSC 341 CVS/Ant
15
Targets
The target tag has the following required attribute
Targets may also have optional attributes such as
depends – a list of other target names for which this task is
dependant upon, the specified task(s) get executed first
description – a description of what a target does
Targets in Ant can depend on some number of other
targets
name – the logical name for a target
For example, we might have a target to create a jarfile, which first
depends upon another target to compile the code
Targets contain a list of tasks to be executed
July 2011
CMSC 341 CVS/Ant
16
Build File with Targets
<project name="Sample Project" default="compile" basedir=".">
<!-- set up some directories used by this project -->
<target name="init" description="setup project directories">
<!-- list of tasks to be executed -->
</target>
<!-- Compile the java code in src dir into build dir -->
<target name="compile" depends="init" description="compile java sources">
<!-- list of tasks to be executed -->
</target>
<!-- Generate javadocs for current project into docs dir -->
<target name="doc" depends="init" description="generate documentation">
<!-- list of tasks to be executed -->
</target>
<!-- Execute main in the specified class under ${build.dir} -->
<target name=”run" depends=“compile” description=”run the application">
<!-- list of tasks to be executed -->
</target>
<!-- Delete the build & doc directories and Emacs backup (*~) files -->
<target name="clean" description="tidy up the workspace">
<!-- list of tasks to be executed -->
</target>
</project>
July 2011
CMSC 341 CVS/Ant
17
Initialization Target & Tasks
Our initialization target creates the build and
documentation directories
The mkdir task creates a directory
<project name="Sample Project" default="compile" basedir=".">
...
<!-- set up some directories used by this project -->
<target name="init" description="setup project directories">
<mkdir dir="${build.dir}"/>
<mkdir dir="${doc.dir}"/>
</target>
...
</project>
July 2011
CMSC 341 CVS/Ant
18
Compilation Target & Tasks
Our compilation target will compile all java files in the source
directory
The javac task compiles sources into classes
Note the dependence on the init task
<project name="Sample Project" default="compile" basedir=".">
...
<!-- Compile the java code in ${src.dir} into ${build.dir} -->
<target name="compile" depends="init" description="compile java
sources">
<javac srcdir="${source.dir}" destdir="${build.dir}"/>
</target>
...
</project>
July 2011
CMSC 341 CVS/Ant
19
Run Target & Tasks
Our run target will execute main in the fully specified class
Typically dependent on the compile task
<project name="Sample Project" default="compile" basedir=".">
...
<!-- Execute main in the fully qualified name under
${build.dir} -->
<target name=”run" depends=”compile" description=“run the
application">
<java directory=“${build.dir}” classname=“${main.class}”
fork=“yes”>
<arg line=“${args}” />
</java>
</target>
...
</project>
July 2011
CMSC 341 CVS/Ant
20
Running Ant – Command Line
Move into the directory which contains the build.xml file
Type ant followed by the name of a target
unix> ant run
unix> ant compile
Type ant at the unix prompt to run the project’s default
target -- see screen shot on next page
unix> ant
July 2011
CMSC 341 CVS/Ant
21
Ant screen snapshot
July 2011
CMSC 341 CVS/Ant
22
Project Submission
• Projects in this course will be submitted
electronically through the use of an industry
standard version control system named CVS.
• CVS can be used from the Unix command
line, or from an Eclipse perspective.
• In either case, we must be familiar with Java
packages and their associated directory
structure as discussed earlier.
July 2011
CMSC 341 CVS/Ant
23
What is CVS?
Concurrent Versioning System (CVS) is one of
the earlier SCM systems which gained wide
adoption
Open source
Easy to install and use
Simple command line client
Wide integration in a lot of development tools
Used for submitting projects in this course
For good introduction on version control and CVS
see the following book…
Pragmatic Version Control using CVS
July 2011
CMSC 341 CVS/Ant
24
CVS Terminology
Repository – the place where resources (files) are
stored
Checkout – copy resources from the repository and
create a working copy
Checkin/Commit – place resources from your
working copy into the repository
Add – place a resource under version control
Remove – delete a resource from version control
Update – pull down changes from the repository into
your working copy
July 2011
CMSC 341 CVS/Ant
25
Using CVS in this course
• See
http://www.cs.umbc.edu/courses/undergradu
ate/341/fall12/projects/CVS.html
• For additional slides about CVS submission
via Eclipse:
http://www.cs.umbc.edu/courses/undergraduat
e/341/Lectures/CVS/intro-to-cvs.ppt
July 2011
CMSC 341 CVS/Ant
26