Java::SJ::Classpath - Java classpath generator


Java-SJ documentation Contained in the Java-SJ distribution.

Index


Code Index:

NAME

Top

Java::SJ::Classpath - Java classpath generator

DESCRIPTION

Top

This module is used by Java::SJ::Config when generating complete classpaths.

TODO

Top

Test, test, test.

BUGS

Top

None known so far. Please report any and all to Nigel Rantor <wiggly@wiggly.org>

SUPPORT / WARRANTY

Top

This module is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.

LICENSE

Top

The Java::SJ::Classpath module is Copyright (c) 2003 Nigel Rantor. England. All rights reserved.

You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.

AUTHORS

Top

Nigel Rantor <wiggly@wiggly.org>

SEE ALSO

Top

Java::SJ. Java::SJ::Config.


Java-SJ documentation Contained in the Java-SJ distribution.

###########################################################################
#
# Java::SJ::Classpath
#
# $Id: Classpath.pm,v 1.3 2003/07/20 18:52:21 wiggly Exp $
#
# $Author: wiggly $
#
# $DateTime$
#
# $Revision: 1.3 $
#
###########################################################################

package Java::SJ::Classpath;

use Carp;
use English;
use Data::Dumper;
use File::Glob qw( :glob );

our $VERSION = '0.01';

###########################################################################
#
# Constructor
#
###########################################################################
sub new
{
	my $class = shift;
	my $self = {};
	bless $self, $class;

	$self->{'dir'} = [];
	$self->{'jar'} = [];
	
	#print STDERR "[DEBUG] CLASSPATH\n" . Dumper( $self ) . "\n\n";
	return $self;		
}

###########################################################################
#
# add_dir
#
###########################################################################
sub add_dir
{
	my $self = shift;

	my $path = shift;

	push @{$self->{'dir'}}, $path;

	1;
}

###########################################################################
#
# add_jar
#
###########################################################################
sub add_jar
{
	my $self = shift;

	my %hash = @_;

	push @{$self->{'jar'}}, \%hash;

	1;
}

###########################################################################
#
# generate_classpath
#
# This is where much of the SJ magic goes on.
#
# Given the base SJ directory where classes are stored we go off and figure
# out if the Jars we want exist, if so we figure out their full paths. We
# use these and any fully specified jar filenames and classpath directories
# to build a full classpath.
#
###########################################################################
sub generate_classpath
{
	my $self = shift;

	my $base = shift;

	my $jar = undef;

	my $dir = undef;

	my $file = '';
	
	my @classpath = ();

	#print STDERR "[INFO] generate_classpath\n";
	#print STDERR "[INFO] SJ Jar File Directory : $base\n";

	foreach $jar ( @{$self->{'jar'}} )
	{
		if( $jar->{'file'} !~ /^$/ )
		{
			push @classpath, $jar->{'file'};
		}
		else
		{
			#
			# To figure out which JAR file to use we do the following;
			#
			# 1) If both a name and version are specified then we build up the
			# path by concatenating the base lib dir, a path seperator token, the
			# name, a hyphen, the version and '.jar'.
			#
			# 2) If only a name is supplied then we look for all of the filenames
			# in the base lib dir that start with the name specified, sort them
			# lexicographically and take the last one in the list.
			#
			# We take the last because it should be the highest version number for
			# that JAR file.
			#
			#
			if( $jar->{'version'} !~ /^$/ )
			{
				# construct jar pathname
				$file = $base . '/' . $jar->{'name'} . '-' . $jar->{'version'} . '.jar';

				# add it to our list
				push @classpath, $file;

				$file = '';
			}
			else
			{
				# construct base pathname
				$file = $base . '/' . $jar->{'name'} . '-*';
				
				# BSD glob will sort them into ASCII order for us
				@files = bsd_glob( $file );

				# we want the last one
				$file = $files[-1];

				# add it to our list				
				push @classpath, $file;

				$file = '';
			}
		}
	}	

	return join( ':', ( @classpath, @{$self->{'dir'}} ) );
}

###########################################################################
1;