donaldp 02/04/14 01:47:26
Modified: container build.xml
container/src/java/org/apache/myrmidon/components/workspace
RoutingLogger.java
container/src/java/org/apache/myrmidon/frontends
CLIMain.java
container/src/test/org/apache/myrmidon
AbstractMyrmidonTest.java AbstractProjectTest.java
Added: container/src/java/org/apache/myrmidon/interfaces
AbstractLogger.java BasicLogger.java
EmbeddedAnt.java Resources.properties
Removed: container/src/java/org/apache/myrmidon/frontends
AbstractLogger.java BasicLogger.java
EmbeddedAnt.java
Log:
Move EmbeddedAnt and *Logger out of Frontends and into the interfaces package
as they are used from tasks and thus need to be in the container-api jar.
We will need to rejig this a litt before too much longer.
Revision Changes Path
1.3 +22 -2 jakarta-ant-myrmidon/container/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-ant-myrmidon/container/build.xml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- build.xml 11 Apr 2002 13:23:40 -0000 1.2
+++ build.xml 14 Apr 2002 08:47:26 -0000 1.3
@@ -63,8 +63,14 @@
<target name="main" depends="jar" description="Build the project"/>
<target name="rebuild" depends="clean,main" description="Rebuild the
project"/>
+ <target name="prepare">
+ <available property="jdepend.present"
+ classname="jdepend.framework.JDepend"
+ classpathref="project.class.path" />
+ </target>
+
<!-- Compiles the source code -->
- <target name="compile" description="Compiles the source code">
+ <target name="compile" depends="prepare" description="Compiles the
source code">
<mkdir dir="${build.classes}"/>
@@ -78,6 +84,7 @@
<classpath refid="project.class.path" />
<src path="${test.dir}"/>
<include name="**/*.java"/>
+ <exclude name="**/DependencyMetricsTestCase.java"
unless="jdepend.present"/>
</javac>
<!-- copy resources to same location as .class files -->
@@ -122,9 +129,22 @@
manifest="${build.conf}/MANIFEST.MF">
<exclude name="**/test/**"/>
<exclude name="org/apache/myrmidon/launcher/**" />
+ <exclude name="org/apache/myrmidon/interfaces/**" />
+ <zipfileset dir="${build.conf}" prefix="META-INF/">
+ <include name="LICENSE.txt"/>
+ <include name="ant-types.xml"/>
+ </zipfileset>
+ </jar>
+
+ <jar jarfile="${build.lib}/${name}-api-${version}.jar"
+ basedir="${build.classes}"
+ compress="${build.compress}"
+ manifest="${build.conf}/MANIFEST.MF">
+ <exclude name="**/test/**"/>
+ <include name="org/apache/myrmidon/interfaces/**" />
<zipfileset dir="${build.conf}" prefix="META-INF/">
<include name="LICENSE.txt"/>
- <include name="ant-*.xml"/>
+ <include name="ant-roles.xml"/>
</zipfileset>
</jar>
1.3 +2 -2
jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/components/workspace/RoutingLogger.java
Index: RoutingLogger.java
===================================================================
RCS file:
/home/cvs/jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/components/workspace/RoutingLogger.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RoutingLogger.java 18 Mar 2002 11:49:46 -0000 1.2
+++ RoutingLogger.java 14 Apr 2002 08:47:26 -0000 1.3
@@ -8,13 +8,13 @@
package org.apache.myrmidon.components.workspace;
import org.apache.avalon.framework.logger.Logger;
-import org.apache.myrmidon.frontends.AbstractLogger;
+import org.apache.myrmidon.interfaces.AbstractLogger;
/**
* A logger that just routes the messages to the ProjectListenerSupport.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
- * @version $Revision: 1.2 $ $Date: 2002/03/18 11:49:46 $
+ * @version $Revision: 1.3 $ $Date: 2002/04/14 08:47:26 $
*/
final class RoutingLogger
extends AbstractLogger
1.40 +3 -1
jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/frontends/CLIMain.java
Index: CLIMain.java
===================================================================
RCS file:
/home/cvs/jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/frontends/CLIMain.java,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- CLIMain.java 9 Apr 2002 07:21:12 -0000 1.39
+++ CLIMain.java 14 Apr 2002 08:47:26 -0000 1.40
@@ -25,6 +25,8 @@
import org.apache.myrmidon.Constants;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.interfaces.executor.Executor;
+import org.apache.myrmidon.interfaces.EmbeddedAnt;
+import org.apache.myrmidon.interfaces.BasicLogger;
/**
* The class to kick the tires and light the fires.
@@ -32,7 +34,7 @@
* to run project.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
- * @version $Revision: 1.39 $ $Date: 2002/04/09 07:21:12 $
+ * @version $Revision: 1.40 $ $Date: 2002/04/14 08:47:26 $
*/
public class CLIMain
{
1.1
jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/interfaces/AbstractLogger.java
Index: AbstractLogger.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.myrmidon.interfaces;
import org.apache.avalon.framework.logger.Logger;
/**
* A partial logger implementation.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
* @version $Revision: 1.1 $ $Date: 2002/04/14 08:47:26 $
*/
public abstract class AbstractLogger
implements Logger
{
public static final int LEVEL_DEBUG = 0;
public static final int LEVEL_INFO = 1;
public static final int LEVEL_WARN = 2;
public static final int LEVEL_ERROR = 3;
public static final int LEVEL_FATAL = 4;
/**
* Log a debug message.
*
* @param message the message
*/
public void debug( final String message )
{
if( isDebugEnabled() )
{
output( message, null );
}
}
/**
* Log a debug message.
*
* @param message the message
* @param throwable the throwable
*/
public void debug( final String message, final Throwable throwable )
{
if( isDebugEnabled() )
{
output( message, throwable );
}
}
/**
* Log a info message.
*
* @param message the message
*/
public void info( final String message )
{
if( isInfoEnabled() )
{
output( message, null );
}
}
/**
* Log a info message.
*
* @param message the message
* @param throwable the throwable
*/
public void info( final String message, final Throwable throwable )
{
if( isInfoEnabled() )
{
output( message, throwable );
}
}
/**
* Log a warn message.
*
* @param message the message
*/
public void warn( final String message )
{
if( isWarnEnabled() )
{
output( message, null );
}
}
/**
* Log a warn message.
*
* @param message the message
* @param throwable the throwable
*/
public void warn( final String message, final Throwable throwable )
{
if( isWarnEnabled() )
{
output( message, throwable );
}
}
/**
* Log a error message.
*
* @param message the message
*/
public void error( final String message )
{
if( isErrorEnabled() )
{
output( message, null );
}
}
/**
* Log a error message.
*
* @param message the message
* @param throwable the throwable
*/
public void error( final String message, final Throwable throwable )
{
if( isErrorEnabled() )
{
output( message, throwable );
}
}
/**
* Log a fatalError message.
*
* @param message the message
*/
public void fatalError( final String message )
{
if( isFatalErrorEnabled() )
{
output( message, null );
}
}
/**
* Log a fatalError message.
*
* @param message the message
* @param throwable the throwable
*/
public void fatalError( final String message, final Throwable throwable )
{
if( isFatalErrorEnabled() )
{
output( message, throwable );
}
}
/**
* Utility method to output messages.
*/
protected abstract void output( final String message,
final Throwable throwable );
}
1.1
jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/interfaces/BasicLogger.java
Index: BasicLogger.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.myrmidon.interfaces;
import org.apache.avalon.framework.ExceptionUtil;
import org.apache.avalon.framework.logger.Logger;
/**
* A basic logger that just prints out messages to <code>System.out</code>.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
* @version $Revision: 1.1 $ $Date: 2002/04/14 08:47:26 $
*/
public class BasicLogger
extends AbstractLogger
implements Logger
{
/**
* The string prefixed to all log messages.
*/
private final String m_prefix;
/**
* The level at which messages start becoming logged.
*/
private final int m_logLevel;
/**
* Create a logger that has specified prefix and is logging
* at specified level.
*/
public BasicLogger( final String prefix, final int logLevel )
{
m_prefix = prefix;
m_logLevel = logLevel;
}
/**
* Determine if messages of priority "debug" will be logged.
*
* @return true if "debug" messages will be logged
*/
public boolean isDebugEnabled()
{
return m_logLevel <= LEVEL_DEBUG;
}
/**
* Determine if messages of priority "info" will be logged.
*
* @return true if "info" messages will be logged
*/
public boolean isInfoEnabled()
{
return m_logLevel <= LEVEL_INFO;
}
/**
* Determine if messages of priority "warn" will be logged.
*
* @return true if "warn" messages will be logged
*/
public boolean isWarnEnabled()
{
return m_logLevel <= LEVEL_WARN;
}
/**
* Determine if messages of priority "error" will be logged.
*
* @return true if "error" messages will be logged
*/
public boolean isErrorEnabled()
{
return m_logLevel <= LEVEL_ERROR;
}
/**
* Determine if messages of priority "fatalError" will be logged.
*
* @return true if "fatalError" messages will be logged
*/
public boolean isFatalErrorEnabled()
{
return m_logLevel <= LEVEL_FATAL;
}
/**
* Create a new child logger.
* The name of the child logger is [current-loggers-name].[passed-in-name]
*
* @param name the subname of this logger
* @return the new logger
* @exception IllegalArgumentException if name has an empty element name
*/
public Logger getChildLogger( final String name )
{
return new BasicLogger( m_prefix + "." + name, m_logLevel );
}
/**
* Utility method to output messages.
*/
protected void output( final String message, final Throwable throwable )
{
final StringBuffer sb = new StringBuffer( m_prefix );
if( null != message )
{
sb.append( message );
}
System.out.println( sb );
if( null != throwable )
{
final String stackTrace = ExceptionUtil.printStackTrace(
throwable, 8, true, true );
System.out.println( stackTrace );
}
}
}
1.1
jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/interfaces/EmbeddedAnt.java
Index: EmbeddedAnt.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.myrmidon.interfaces;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.excalibur.io.FileUtil;
import org.apache.avalon.excalibur.util.StringUtil;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.activity.Startable;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.interfaces.embeddor.Embeddor;
import org.apache.myrmidon.interfaces.model.Project;
import org.apache.myrmidon.interfaces.workspace.Workspace;
import org.apache.myrmidon.listeners.ProjectListener;
/**
* A utility class, that takes care of launching Myrmidon, and building and
* executing a project.
*
* <p>To use this class, create an instance and configure. To execute
* targets in a project, use the [EMAIL PROTECTED] #executeTargets} method.
This can
* be done one or more times. Finally, call the [EMAIL PROTECTED] #stop}
method to
* clean-up.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Adam Murdoch</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
* @version $Revision: 1.1 $ $Date: 2002/04/14 08:47:26 $
*/
public class EmbeddedAnt
extends AbstractLogEnabled
{
private static final Resources REZ =
ResourceManager.getPackageResources( EmbeddedAnt.class );
private static final String DEFAULT_EMBEDDOR_CLASS =
"org.apache.myrmidon.components.embeddor.DefaultEmbeddor";
private final ArrayList m_listeners = new ArrayList();
private final Parameters m_builderProps = new Parameters();
private final Map m_embeddorParameters = new HashMap();
private final Map m_workspaceProperties = new HashMap();
private String m_projectFile = "build.ant";
private Project m_project;
private String m_listenerName = "default";
private ClassLoader m_sharedClassLoader;
private Embeddor m_embeddor;
private File m_homeDir;
private String m_projectType;
/**
* Sets the Myrmidon home directory. Default is to use the current
* directory.
*
* @todo Autodetect myrmidon home, rather than using current directory
* as the default (which is a dud default).
*/
public void setHomeDirectory( final File homeDir )
{
m_homeDir = homeDir.getAbsoluteFile();
}
/**
* Sets the project file to execute. Default is 'build.ant'.
*/
public void setProjectFile( final String projectFile )
{
m_projectFile = projectFile;
m_project = null;
}
/**
* Sets the project file type. Ignored if [EMAIL PROTECTED] #setProject}
is used.
* Set to null to use the default project type.
*/
public void setProjectType( final String projectType )
{
m_projectType = projectType;
}
/**
* Sets the project to execute. This method can be used instead of
* [EMAIL PROTECTED] #setProjectFile}, for projects models that are built
* programmatically.
*/
public void setProject( final Project project )
{
m_projectFile = null;
m_project = project;
}
/**
* Sets the name of the project listener to use. Set to null to disable
* the project listener.
*/
public void setProjectListener( final String listener )
{
m_listenerName = listener;
}
/**
* Adds a project listener.
*/
public void addProjectListener( final ProjectListener listener )
{
m_listeners.add( listener );
}
/**
* Sets a workspace property. These are inherited by all projects
executed
* by this embeddor.
*/
public void setWorkspaceProperty( final String name, final Object value )
{
m_workspaceProperties.put( name, value );
}
/**
* Sets a project builder property. These are used by the project builder
* when it is parsing the project file.
*/
public void setBuilderProperty( final String name, final Object value )
{
// TODO - Make properties Objects, not Strings
m_builderProps.setParameter( name, value.toString() );
}
/**
* Sets a task engine property. These are used to configure the task
engine.
*
* @todo Make this method actually work with objects...
*/
public void setEmbeddorProperty( final String name, final Object value )
{
m_embeddorParameters.put( name, value.toString() );
}
/**
* Sets the shared classloader, which is used as the parent classloader
* for all antlibs. Default is to use the context classloader.
*/
public void setSharedClassLoader( final ClassLoader classLoader )
{
m_sharedClassLoader = classLoader;
}
/**
* Executes a set of targets in the project. This method may be called
* multiple times.
*/
public void executeTargets( final String[] targets ) throws Exception
{
Map embeddorParameters = new HashMap( m_embeddorParameters );
setupPaths( embeddorParameters );
if( m_sharedClassLoader != null )
{
embeddorParameters.put( "myrmidon.shared.classloader",
m_sharedClassLoader );
}
// Prepare the embeddor, and project model
final Embeddor embeddor = prepareEmbeddor( embeddorParameters );
final Project project = prepareProjectModel( embeddor );
// Create a new workspace
final Workspace workspace = embeddor.createWorkspace(
m_workspaceProperties );
prepareListeners( embeddor, workspace );
//execute the project
executeTargets( workspace, project, targets );
}
/**
* Shuts down the task engine, after the project has been executed.
*/
public void stop() throws Exception
{
try
{
if( m_embeddor != null )
{
if( m_embeddor instanceof Startable )
{
( (Startable)m_embeddor ).stop();
}
if( m_embeddor instanceof Disposable )
{
( (Disposable)m_embeddor ).dispose();
}
}
}
finally
{
m_embeddor = null;
m_project = null;
m_listeners.clear();
}
}
/**
* Actually do the build.
*/
private void executeTargets( final Workspace workspace,
final Project project,
final String[] targets )
throws TaskException
{
//if we didn't specify a target, then choose default
if( targets == null || targets.length == 0 )
{
workspace.executeProject( project, project.getDefaultTargetName()
);
}
else
{
for( int i = 0; i < targets.length; i++ )
{
workspace.executeProject( project, targets[ i ] );
}
}
}
/**
* Make sure myrmidon home directory has been specified, and is a
* directory. Set the paths that the embeddor expects.
*/
private void setupPaths( Map parameters ) throws Exception
{
if( m_homeDir == null )
{
m_homeDir = new File( "." ).getAbsoluteFile();
}
checkDirectory( m_homeDir, "home-dir.name" );
parameters.put( "myrmidon.home", m_homeDir );
if( getLogger().isInfoEnabled() )
{
final String message = REZ.getString( "homedir.notice", m_homeDir
);
getLogger().info( message );
}
// Build the lib path
String path = (String)parameters.get( "myrmidon.lib.path" );
File[] dirs = buildPath( m_homeDir, path, "lib", "lib-dir.name" );
parameters.put( "myrmidon.lib.path", dirs );
// Build the antlib search path
path = (String)parameters.get( "myrmidon.antlib.path" );
dirs = buildPath( m_homeDir, path, "ext", "task-lib-dir.name" );
parameters.put( "myrmidon.antlib.path", dirs );
// Build the extension search path
path = (String)parameters.get( "myrmidon.ext.path" );
dirs = buildPath( m_homeDir, path, "ext", "ext-dir.name" );
parameters.put( "myrmidon.ext.path", dirs );
}
/**
* Prepares and returns the embeddor to use.
*/
private Embeddor prepareEmbeddor( final Map parameters )
throws Exception
{
if( m_embeddor == null )
{
m_embeddor = createEmbeddor();
setupLogger( m_embeddor );
if( m_embeddor instanceof Contextualizable )
{
final Context context = new DefaultContext( parameters );
( (Contextualizable)m_embeddor ).contextualize( context );
}
if( m_embeddor instanceof Initializable )
{
( (Initializable)m_embeddor ).initialize();
}
if( m_embeddor instanceof Startable )
{
( (Startable)m_embeddor ).start();
}
}
return m_embeddor;
}
/**
* Creates the embeddor.
*/
private Embeddor createEmbeddor()
throws Exception
{
final Class clazz = Class.forName( DEFAULT_EMBEDDOR_CLASS );
return (Embeddor)clazz.newInstance();
}
/**
* Prepares and returns the project listener to use.
*/
private void prepareListeners( final Embeddor embeddor,
final Workspace workspace )
throws Exception
{
if( m_listenerName != null )
{
final ProjectListener listener = embeddor.createListener(
m_listenerName );
workspace.addProjectListener( listener );
}
final int count = m_listeners.size();
for( int i = 0; i < count; i++ )
{
final ProjectListener listener =
(ProjectListener)m_listeners.get( i );
workspace.addProjectListener( listener );
}
}
/**
* Prepares and returns the project model.
*/
private Project prepareProjectModel( final Embeddor embeddor ) throws
Exception
{
if( m_project == null )
{
final File buildFile = getProjectFile();
m_project = embeddor.createProject( buildFile.toString(),
m_projectType, m_builderProps );
}
return m_project;
}
/**
* Locates the project file
*/
private File getProjectFile() throws Exception
{
final File projectFile = ( new File( m_projectFile )
).getCanonicalFile();
if( !projectFile.isFile() )
{
final String message = REZ.getString( "bad-file.error",
projectFile );
throw new Exception( message );
}
if( getLogger().isInfoEnabled() )
{
final String message = REZ.getString( "buildfile.notice",
projectFile );
getLogger().info( message );
}
return projectFile;
}
/**
* Resolve a directory relative to another base directory.
*/
private File[] buildPath( final File baseDir,
final String path,
final String defaultPath,
final String name )
throws Exception
{
// Build the canonical list of files
final ArrayList files = new ArrayList();
// Add the default path
files.add( FileUtil.resolveFile( baseDir, defaultPath ) );
// Add the additional path
if( path != null )
{
final String[] split = StringUtil.split( path, File.pathSeparator
);
for( int i = 0; i < split.length; i++ )
{
final String s = split[ i ];
final File file = new File( s ).getAbsoluteFile();
files.add( file );
}
}
// Check each one
for( int i = 0; i < files.size(); i++ )
{
File file = (File)files.get( i );
checkDirectory( file, name );
}
return (File[])files.toArray( new File[ files.size() ] );
}
/**
* Verify file is a directory else throw an exception.
*/
private void checkDirectory( final File file, final String name )
throws Exception
{
if( !file.exists() )
{
final String nameStr = REZ.getString( name );
final String message = REZ.getString( "file-no-exist.error",
nameStr, file );
throw new Exception( message );
}
else if( !file.isDirectory() )
{
final String nameStr = REZ.getString( name );
final String message = REZ.getString( "file-not-dir.error",
nameStr, file );
throw new Exception( message );
}
}
}
1.1
jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/interfaces/Resources.properties
Index: Resources.properties
===================================================================
homedir.notice=Ant Home Directory: {0}
buildfile.notice=Ant Build File: {0}
bad-file.error=Invalid Build File "{0}". (Non-file)
file-no-exist.error={0} {1} does not exist.
file-not-dir.error={0} {1} is not a directory.
home-dir.name=Ant home directory
lib-dir.name=Library directory
task-lib-dir.name=Antlib directory
ext-dir.name=Extension directory
1.14 +1 -1
jakarta-ant-myrmidon/container/src/test/org/apache/myrmidon/AbstractMyrmidonTest.java
Index: AbstractMyrmidonTest.java
===================================================================
RCS file:
/home/cvs/jakarta-ant-myrmidon/container/src/test/org/apache/myrmidon/AbstractMyrmidonTest.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- AbstractMyrmidonTest.java 7 Apr 2002 02:27:58 -0000 1.13
+++ AbstractMyrmidonTest.java 14 Apr 2002 08:47:26 -0000 1.14
@@ -14,7 +14,7 @@
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.framework.ExceptionUtil;
import org.apache.avalon.framework.logger.Logger;
-import org.apache.myrmidon.frontends.BasicLogger;
+import org.apache.myrmidon.interfaces.BasicLogger;
/**
* A base class for Myrmidon tests. Provides utility methods for locating
1.9 +2 -2
jakarta-ant-myrmidon/container/src/test/org/apache/myrmidon/AbstractProjectTest.java
Index: AbstractProjectTest.java
===================================================================
RCS file:
/home/cvs/jakarta-ant-myrmidon/container/src/test/org/apache/myrmidon/AbstractProjectTest.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- AbstractProjectTest.java 7 Apr 2002 02:27:58 -0000 1.8
+++ AbstractProjectTest.java 14 Apr 2002 08:47:26 -0000 1.9
@@ -8,7 +8,7 @@
package org.apache.myrmidon;
import java.io.File;
-import org.apache.myrmidon.frontends.EmbeddedAnt;
+import org.apache.myrmidon.interfaces.EmbeddedAnt;
import org.apache.myrmidon.listeners.ProjectListener;
import org.apache.avalon.framework.ExceptionUtil;
@@ -16,7 +16,7 @@
* A base class for test cases which need to execute projects.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Adam Murdoch</a>
- * @version $Revision: 1.8 $ $Date: 2002/04/07 02:27:58 $
+ * @version $Revision: 1.9 $ $Date: 2002/04/14 08:47:26 $
*/
public class AbstractProjectTest
extends AbstractMyrmidonTest
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>