ANT CVS and CVS Utilities CMSC 341 Data

  • Slides: 50
Download presentation
ANT, CVS and CVS Utilities CMSC 341 – Data Structures Spring 2012 University of

ANT, CVS and CVS Utilities CMSC 341 – Data Structures Spring 2012 University of Maryland, Baltimore County Slides prepared by Prajit Kumar Das – Summarized from older CMSC 341 slides provided by Dr. Yun Peng

Packages A file may belong to only one package. • Packages serve as a

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. • packagename; packagename. subpackagename; July 2011 CMSC 341 CVS/Ant 2

Packages (cont. ) It is common practice to duplicate the package directory hierarchy in

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 • Project 1 Root of project directory tree src proj 1 Package name Example. java proj 1 Package name bin Example. class July 2011 CMSC 341 CVS/Ant 3

Compiling with packages When using the Unix command line, classes in a package are

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 Project 1/src directory to the Project 1/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 proj 1 directory under bin. • javac –d. . /bin proj 1/Example. java July 2011 CMSC 341 CVS/Ant 4

Packages and Eclipse By default Eclipse automatically creates a src/ directory when you create

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 5

What is Ant? Ant is a Java based tool for automating the build process

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 6

Anatomy of a Build File Ant’s build files are written in XML Each build

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 7

Projects The project tag is used to define the project to which the ANT

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 8

Project tag <project name="Sample Project" default="compile" basedir=". "> <description> A sample build file for

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 9

Properties Build files may contain constants (known as properties) to assign a value to

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 10

Build File with Properties <project name="Sample Project" default="compile" basedir=". "> <description> A sample build

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 11

Tasks A task represents an action that needs execution Tasks have a variable number

Tasks A task represents an action that needs execution Tasks have a variable number of attributes which are task dependant There 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… For a full list see: http: //ant. apache. org/manual/tasksoverview. html July 2011 CMSC 341 CVS/Ant 12

Targets The target tag has the following required attribute Targets may also have optional

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 13

Build File with Targets <project name="Sample Project" default="compile" basedir=". "> <!-- set up some

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 14

Initialization Target & Tasks Our initialization target creates the build and documentation directories The

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 15

Compilation Target & Tasks Our compilation target will compile all java files in the

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 16

Run Target & Tasks Our run target will execute main in the fully specified

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 17

Running Ant – Command Line Move into the directory which contains the build. xml

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 18

CVS Command • The general form of CVS commands is: cvs [cvs-options] command [command-options-and-arguments]

CVS Command • The general form of CVS commands is: cvs [cvs-options] command [command-options-and-arguments] – All CVS commands start out with “cvs” – Commands may also have flags and/or arguments which modify their behavior • For a more help… – General help: cvs --help – List of commands: cvs --help-commands 6/9/2021 UMBC CMSC 341 19

Basic commands checkout : Pull resources from the repository and create a working copy

Basic commands checkout : Pull resources from the repository and create a working copy add : place a resource under version control update : Pull down changes from the repository into your working copy commit: Check files into the repository 6/9/2021 UMBC CMSC 341 20

Command-line using Putty Steps to be followed ◦ Log in using Putty ◦ Edit

Command-line using Putty Steps to be followed ◦ Log in using Putty ◦ Edit the. cshrc file : Add usr/local/bin/javac 6/9/2021 alias javac UMBC CMSC 341 21

Command-line using Putty Step 1: cd changes your working directory to home directory Step

Command-line using Putty Step 1: cd changes your working directory to home directory Step 2: cvs -d /afs/umbc. edu/users/f/r/frey/pub/cs 341 s 12/Proj 0 checkout -d My. Proj 0 your_username 6/9/2021 UMBC CMSC 341 22

Command-line using Putty Step 3: cd My. Proj 0 Change to your project directory

Command-line using Putty Step 3: cd My. Proj 0 Change to your project directory Step 4 : mkdir src Step 5: cd src Step 6: Create a java file called Proj 0. java and type in a simple java code. Let the package name be ‘firstproject’. Save the file in the src folder. 6/9/2021 UMBC CMSC 341 23

Step 9: Edit build. xml 6/9/2021 UMBC CMSC 341 24

Step 9: Edit build. xml 6/9/2021 UMBC CMSC 341 24

Command-line using Putty Step 10: Compile the code using ant compile Step 11: Run

Command-line using Putty Step 10: Compile the code using ant compile Step 11: Run the code using ant run 6/9/2021 UMBC CMSC 341 25

Command-line using Putty Step 12 : Add files to the repository: ◦ Step 12.

Command-line using Putty Step 12 : Add files to the repository: ◦ Step 12. 1 cvs add build. xml ◦ Step 12. 2 cvs add src/ ◦ Step 12. 3 cd src ◦ Step 12. 4 cvs add Proj 0. java ◦ Step 12. 5 cvs commit –m ‘some text’ 6/9/2021 UMBC CMSC 341 26

Command-line using Putty Step 13: Check if Proj 0. java is added to the

Command-line using Putty Step 13: Check if Proj 0. java is added to the repository ◦ Go to src folder in My. Proj 0 ◦ Remove Proj 0. java ◦ Run ‘cvs update’ ◦ You should get back Proj 0. java from the repository 6/9/2021 UMBC CMSC 341 27

Eclipse has a built-in perspective for CVS ◦ All of the developer downloads come

Eclipse has a built-in perspective for CVS ◦ All of the developer downloads come with it pre-installed (The following directions are for the Eclipse Ganymede Eclipse IDE for Java Developer release)

Eclipse – CVS Perspective To open the CVS repository perspective select Window Open Perspective

Eclipse – CVS Perspective To open the CVS repository perspective select Window Open Perspective Other…

Eclipse – CVS Perspective Select CVS Repository Exploring

Eclipse – CVS Perspective Select CVS Repository Exploring

Eclipse – Adding a Repository To add a repository, right click on the CVS

Eclipse – Adding a Repository To add a repository, right click on the CVS Repositories pane and select New Repository Location…

Eclipse – Connection Settings Type in the parameters to connect to the remote repository

Eclipse – Connection Settings Type in the parameters to connect to the remote repository For example… ◦ Host: linux. gl. umbc. edu ◦ Repository Path: /afs/umbc. edu/users/f/r/frey/pub/cs 341 s 12/Proj 0/ ◦ User: Your GL/my. UMBC username ◦ Password: Your GL/my. UMBC password ◦ Connection type: extssh Save the password if you wish

Eclipse – Connection Settings

Eclipse – Connection Settings

Eclipse – Viewing Repositories You should now see the repository under the CVS Repositories

Eclipse – Viewing Repositories You should now see the repository under the CVS Repositories Pane

Eclipse – Checking Out Expand the repository, expand HEAD, select your module (username) then

Eclipse – Checking Out Expand the repository, expand HEAD, select your module (username) then right click and choose Check Out As…

Eclipse – Checking Out (continued) Be sure to use the New Project Wizard, click

Eclipse – Checking Out (continued) Be sure to use the New Project Wizard, click Finish…

Eclipse – Checking Out (continued) Select to check out the module as a Java

Eclipse – Checking Out (continued) Select to check out the module as a Java Project

Eclipse – Checking Out (continued) Name the project and click Finish…

Eclipse – Checking Out (continued) Name the project and click Finish…

Eclipse – Checked Out Code Switch back to the Java Perspective and you will

Eclipse – Checked Out Code Switch back to the Java Perspective and you will see the module checked out as a project ◦ Note the little orange cylinders – that indicates that it’s under version control

Eclipse – New Resources • Just like with the command line, items that are

Eclipse – New Resources • Just like with the command line, items that are not know to be under CVS control are marked with a “? ” symbol – Such as the Eclipse generated src folder

Eclipse – Synchronizing To commit to or update from the repository, right click on

Eclipse – Synchronizing To commit to or update from the repository, right click on the project and choose Team Synchronize with Repository

Eclipse – Committing Resources Here we see an outgoing arrow indicating that this needs

Eclipse – Committing Resources Here we see an outgoing arrow indicating that this needs to be pushed to the repository ◦ Commits and updates can be performed by right clicking

Eclipse – Synchronized If all is in sync, you should see the “No Changes”

Eclipse – Synchronized If all is in sync, you should see the “No Changes” dialog as shown below…

CVS Utilities - Setup The CVS utilities are located in the directory: /afs/umbc. edu/users/f/r/frey/pub/341/bin/

CVS Utilities - Setup The CVS utilities are located in the directory: /afs/umbc. edu/users/f/r/frey/pub/341/bin/ To use the commands you may specify the complete pathname. linux 1[4]% /afs/umbc. edu/users/f/r/frey/pub/341/bin/the-command Or, you may change your Unix PATH to include that directory by editing your. cshrc file found in your home directory (notice the leading "dot". ) In your favorite editor, add the following line somewhere near the bottom of your file. set path = ( $path /afs/umbc. edu/users/f/r/frey/pub/341/bin ) The next time you login, the directory which contain the utilities will be searched when these commands are executed. You can verify the change to your PATH using the following command. You should see the directory at the end of the your path. linux 1[5]% echo $PATH If you choose to edit your. cshrc file, do so with extreme care. The smallest mistake can have dire consequences. 6/9/2021 UMBC CMSC 341 44

CVS Utilities - cvsbuild utility allows you to checkout and build your submission thus

CVS Utilities - cvsbuild utility allows you to checkout and build your submission thus verifying your submission. Run this command from the same directory you originally ran cvs checkout from cvsbuild command has one argument: path to the CVS repository for the project linux 2[2]% cvsbuild /afs/umbc. edu/users/f/r/frey/pub/cs 341 s 12/Proj 0/ 6/9/2021 UMBC CMSC 341 45

CVS Utilities - cvsbuild Running this script will attempt to checkout your code into

CVS Utilities - cvsbuild Running this script will attempt to checkout your code into a directory called <username>-cvs-checkout. If submission is done correctly, you should see the BUILD SUCCESSFUL message as shown above. If the message does not come up, something is either missing from your submission or files are not submitted correctly. Every change in the repository should be followed by a to re-run of this command. Re-running the script, will notify you that it needs to remove the contents of the exiting folder if it does exist, in order to perform the checkout/build. If you wish to avoid the prompt on subsequent runs of the cvsbuild command, simply add a -y flag on the command line (e. g. cvsbuild -y /path/to/repository). 6/9/2021 UMBC CMSC 341 46

CVS Utilities - cvsrun The cvsrun utility allows you to test your program like

CVS Utilities - cvsrun The cvsrun utility allows you to test your program like the graders do. First check-out and build your code using cvsbuild. The cvsrun command can take command line arguments for your main For example… linux 2[3]% cvsrun arg 1 arg 2 arg 3 Buildfile: build. xml run: [java] Hello World! [java] args: [java] arg 1 [java] arg 2 [java] arg 3 BUILD SUCCESSFUL Total time: 0 seconds linux 2[4]% If all goes well, you should see your project run with the arguments you've provided. If you get an “Exception in thread "main" java. lang. No. Class. Def. Found. Error” error the likely cause is that your main. class property value doesn't point to a valid class (either the name is wrong, or its location doesn't match its package hierarchy). Once you're satisfied you can safely remove the <username>-cvs-checkout directory created by cvsbuild and used by cvsrun. 6/9/2021 UMBC CMSC 341 47

CVS Utilities - cvsreset Sometimes you might experience issues with your CVS repository. If

CVS Utilities - cvsreset Sometimes you might experience issues with your CVS repository. If you're running into problems that you believe to be an issue with your repository you may reset it to the initial state for a given project. The effects of the cvsreset are irreversible! Running this command will delete everything you've submitted via CVS for a given project. Ensure that you have a local copy of your source code before running this command. Once ensured you may reset the repository like shown below: - linux 2[4]% cvsreset /afs/umbc. edu/users/f/r/frey/pub/cs 341 f 11/Proj 0 This script will reset your CVS repository to its original condition. This operation is irreversible - anything submitted will be removed. Ensure that you have a local copy of your code before continuing. Enter "y" to continue or "n" to exit: y Resetting CVS repository ------------Done linux 2[5]% 6/9/2021 UMBC CMSC 341 48

CVS Utilities - cvsreset Complete the process with the following steps: - 1. From

CVS Utilities - cvsreset Complete the process with the following steps: - 1. From the parent directory of your project directory, check out your project into a new project directory. 2. Recreate your directory structure and copy your saved files to the new project directory. 3. Rerun the cvs add and cvs commit commands for your directories and files in your new project. 6/9/2021 UMBC CMSC 341 49

Thank you! 6/9/2021 UMBC CMSC 341 50

Thank you! 6/9/2021 UMBC CMSC 341 50