From 1d3dc3765d4efd6ae54488feab07f6a17315ebe6 Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Tue, 5 Dec 2000 09:24:59 +0000 Subject: [PATCH] Continued developing myrmidon * simplified logging interface to be independent of org.apache.log * made it so that you no longer need to build a classpath and hand it to ant!!! * added ant-call task git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268306 13f79535-47bb-0310-9956-ffa450edef68 --- proposal/myrmidon/build.xml | 24 +++- proposal/myrmidon/lib/avalonapi.jar | Bin 161569 -> 161795 bytes .../src/java/org/apache/ant/Main.java | 69 +++++----- .../ant/convert/DefaultConverterLoader.java | 5 +- .../org/apache/ant/launcher/AntLoader.java | 64 +++++++++ .../ant/project/DefaultProjectEngine.java | 128 +++++++++++++----- .../ant/project/DefaultProjectListener.java | 28 ++-- .../java/org/apache/ant/project/Project.java | 2 + .../org/apache/ant/project/ProjectEngine.java | 7 + .../apache/ant/project/ProjectListener.java | 6 +- .../ant/project/ProjectListenerSupport.java | 110 +++++++++++++++ .../ant/project/ProjectToListenerAdapter.java | 40 ++++++ .../java/org/apache/ant/project/Target.java | 2 + .../tasklet/engine/DefaultTaskletEngine.java | 6 +- .../ant/tasklet/engine/TaskletEngine.java | 2 + .../ant/tasklet/engine/TskDeployer.java | 5 + .../org/apache/ant/tasks/core/AntCall.java | 77 +++++++++++ .../ant/tasks/core/ConfigurationTest.java | 2 +- .../apache/ant/tasks/core/ContentTest.java | 2 +- .../java/org/apache/ant/tasks/core/Echo.java | 2 +- .../ant/tasks/core/PrimitiveTypesTest.java | 26 ++-- .../ant/tasks/core/RegisterTasklet.java | 102 ++++++++++++++ .../apache/ant/tasks/core/taskdefs.properties | 4 +- proposal/myrmidon/src/make/sample.xmk | 10 ++ .../myrmidon/src/manifest/ant-manifest.mf | 3 + .../src/manifest/myrmidon-manifest.mf | 4 + proposal/myrmidon/src/script/ant | 31 ++--- proposal/myrmidon/src/script/ant.bat | 24 ++-- 28 files changed, 647 insertions(+), 138 deletions(-) create mode 100644 proposal/myrmidon/src/java/org/apache/ant/launcher/AntLoader.java create mode 100644 proposal/myrmidon/src/java/org/apache/ant/project/ProjectListenerSupport.java create mode 100644 proposal/myrmidon/src/java/org/apache/ant/project/ProjectToListenerAdapter.java create mode 100644 proposal/myrmidon/src/java/org/apache/ant/tasks/core/AntCall.java create mode 100644 proposal/myrmidon/src/java/org/apache/ant/tasks/core/RegisterTasklet.java create mode 100644 proposal/myrmidon/src/manifest/ant-manifest.mf create mode 100644 proposal/myrmidon/src/manifest/myrmidon-manifest.mf diff --git a/proposal/myrmidon/build.xml b/proposal/myrmidon/build.xml index f90cffa37..3c929c279 100644 --- a/proposal/myrmidon/build.xml +++ b/proposal/myrmidon/build.xml @@ -156,11 +156,13 @@ Legal: optimize="${optimize}" deprecation="${deprecation}" /> + - + + + + + + + + + @@ -200,7 +218,7 @@ Legal: Creates the distribution =================================================================== --> - + diff --git a/proposal/myrmidon/lib/avalonapi.jar b/proposal/myrmidon/lib/avalonapi.jar index 1238e40f0c88271d7cac61c18b3214aafb454650..fdf0857cf1a21f3ba302a4f6edf8274072edef76 100644 GIT binary patch delta 9904 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 a4nkl9B!_?jC<(z2Lm)MxO%c$|@%|6AouPeter Donald + */ +public final class AntLoader + extends URLClassLoader +{ + protected static AntLoader c_classLoader; + + public static AntLoader getLoader() + { + if( null == c_classLoader ) + { + c_classLoader = new AntLoader( new URL[ 0 ] ); + } + + return c_classLoader; + } + + public final static void main( final String args[] ) + throws Exception + { + final URL archive = new URL( "file:lib/myrmidon.jar" ); + c_classLoader = new AntLoader( new URL[] { archive } ); + + try + { + //load class and retrieve appropriate main method. + final Class clazz = c_classLoader.loadClass( "org.apache.ant.Main" ); + final Method method = clazz.getMethod( "main", new Class[] { args.getClass() } ); + + //kick the tires and light the fires.... + method.invoke( null, new Object[] { args } ); + } + catch( final Throwable throwable ) + { + throwable.printStackTrace(); + } + } + + public AntLoader( final URL[] urls ) + { + super( urls ); + } + + public void addURL( final URL url ) + { + super.addURL( url ); + } +} diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java index a9c2463d1..a2780c6ec 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java @@ -32,39 +32,52 @@ import org.apache.log.Logger; public class DefaultProjectEngine implements ProjectEngine, Initializable, Disposable { - protected Deployer m_deployer; - protected TaskletRegistry m_taskletRegistry; - protected ConverterRegistry m_converterRegistry; - protected TaskletEngine m_taskletEngine; - protected Logger m_logger; - + protected Deployer m_deployer; + protected TaskletRegistry m_taskletRegistry; + protected ConverterRegistry m_converterRegistry; + protected TaskletEngine m_taskletEngine; + protected Logger m_logger; + protected ProjectListenerSupport m_listenerSupport; + protected DefaultComponentManager m_componentManager; + public void setLogger( final Logger logger ) { m_logger = logger; } + public void addProjectListener( final ProjectListener listener ) + { + m_listenerSupport.addProjectListener( listener ); + } + + public void removeProjectListener( final ProjectListener listener ) + { + m_listenerSupport.removeProjectListener( listener ); + } + public void init() throws Exception { + m_listenerSupport = new ProjectListenerSupport(); + m_taskletEngine = createTaskletEngine(); + m_taskletEngine.setLogger( m_logger ); m_taskletRegistry = createTaskletRegistry(); m_converterRegistry = createConverterRegistry(); m_deployer = createDeployer(); - //final DefaultTaskletContext context = new DefaultTaskletContext(); - //m_taskletEngine.contextualize( context ); - - final DefaultComponentManager componentManager = new DefaultComponentManager(); - componentManager.put( "org.apache.ant.tasklet.engine.TaskletRegistry", - m_taskletRegistry ); + m_componentManager = new DefaultComponentManager(); + m_componentManager.put( "org.apache.ant.project.ProjectEngine", this ); + m_componentManager.put( "org.apache.ant.tasklet.engine.TaskletRegistry", + m_taskletRegistry ); - componentManager.put( "org.apache.ant.convert.ConverterRegistry", - m_converterRegistry ); + m_componentManager.put( "org.apache.ant.convert.ConverterRegistry", + m_converterRegistry ); - componentManager.put( "org.apache.avalon.camelot.Deployer", m_deployer ); + m_componentManager.put( "org.apache.avalon.camelot.Deployer", m_deployer ); - m_taskletEngine.compose( componentManager ); + m_taskletEngine.compose( m_componentManager ); if( m_taskletEngine instanceof Initializable ) { @@ -112,15 +125,36 @@ public class DefaultProjectEngine public void execute( final Project project, final String target ) throws AntException { - m_taskletEngine.contextualize( project.getContext() ); - executeTarget( "", project.getImplicitTarget() ); + m_componentManager.put( "org.apache.ant.project.Project", project ); + + final TaskletContext context = project.getContext(); + + final String projectName = (String)context.getProperty( Project.PROJECT ); + + m_listenerSupport.projectStarted( projectName ); + + executeTargetWork( "", project.getImplicitTarget(), context ); + + //context = new DefaultTaskletContext( context ); + + //placing logger lower (at targetlevel or at task level) + //is possible if you want more fine grained control + context.setProperty( TaskletContext.LOGGER, m_logger ); - final ArrayList done = new ArrayList(); - execute( project, target, done ); + execute( project, target, context ); + + m_listenerSupport.projectFinished(); + } + + public void execute( Project project, String target, TaskletContext context ) + throws AntException + { + execute( project, target, context, new ArrayList() ); } protected void execute( final Project project, final String targetName, + final TaskletContext context, final ArrayList done ) throws AntException { @@ -139,45 +173,67 @@ public class DefaultProjectEngine final String dependency = (String)dependencies.next(); if( !done.contains( dependency ) ) { - execute( project, dependency, done ); + execute( project, dependency, context, done ); } } - final TaskletContext context = getContextFor( project, targetName ); - m_taskletEngine.contextualize( context ); - executeTarget( targetName, target ); + executeTarget( targetName, target, context ); } - protected TaskletContext getContextFor( final Project project, final String targetName ) + protected void executeTarget( final String targetName, + final Target target, + final TaskletContext context ) + throws AntException { - final DefaultTaskletContext context = - new DefaultTaskletContext( project.getContext() ); + m_componentManager.put( "org.apache.ant.project.Target", target ); - context.setProperty( Project.TARGET, targetName ); - context.put( TaskletContext.LOGGER, m_logger ); + final TaskletContext targetContext = new DefaultTaskletContext( context ); + targetContext.setProperty( Project.TARGET, targetName ); + + m_listenerSupport.targetStarted( targetName ); - return context; + executeTargetWork( targetName, target, targetContext ); + + m_listenerSupport.targetFinished(); } - protected void executeTarget( final String targetName, final Target target ) - throws AntException + protected void executeTargetWork( final String name, + final Target target, + final TaskletContext context ) { - m_logger.debug( "Executing target " + targetName ); - + m_logger.debug( "Executing target " + name ); + final Iterator tasks = target.getTasks(); while( tasks.hasNext() ) { final Configuration task = (Configuration)tasks.next(); - executeTask( task ); + executeTask( task, context ); } } - protected void executeTask( final Configuration configuration ) + protected void executeTask( final Configuration configuration, + final TaskletContext context ) throws AntException { final String name = configuration.getName(); m_logger.debug( "Executing task " + name ); + //Set up context for task... + final TaskletContext taskletContext = context; + + //is Only necessary if we are multi-threaded + //final TaskletContext targetContext = new DefaultTaskletContext( context ); + taskletContext.setProperty( TaskletContext.NAME, name ); + + m_taskletEngine.contextualize( taskletContext ); + + //notify listeners + m_listenerSupport.taskletStarted( name ); + + //run task m_taskletEngine.execute( configuration ); + + //notify listeners task has ended + m_listenerSupport.taskletFinished(); } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectListener.java b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectListener.java index 51f9e203d..d3a772eab 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectListener.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectListener.java @@ -7,25 +7,13 @@ */ package org.apache.ant.project; -import org.apache.log.format.PatternFormatter; -import org.apache.log.output.DefaultOutputLogTarget; +import org.apache.avalon.util.StringUtil; public class DefaultProjectListener - extends DefaultOutputLogTarget implements ProjectListener { protected String m_prefix; - /** - * Initialize the default pattern. - */ - protected void initPattern() - { - final PatternFormatter formatrer = new PatternFormatter(); - formatrer.setFormat( "%{message}\\n%{throwable}" ); - m_formatter = formatrer; - } - public void projectStarted( final String projectName ) { output( "Starting project " + projectName + "\n" ); @@ -54,9 +42,19 @@ public class DefaultProjectListener m_prefix = null; } + public void log( String message ) + { + output( message ); + } + + public void log( String message, Throwable throwable ) + { + output( message + "\n" + StringUtil.printStackTrace( throwable, 5, true ) ); + } + protected void output( final String data ) { - if( null != m_prefix ) super.output( "[" + m_prefix + "] " + data ); - else super.output( data ); + if( null != m_prefix ) System.out.println( "\t[" + m_prefix + "] " + data ); + else System.out.println( data ); } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/Project.java b/proposal/myrmidon/src/java/org/apache/ant/project/Project.java index 88bf83eff..af9b87c13 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/Project.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/Project.java @@ -10,8 +10,10 @@ package org.apache.ant.project; import java.util.Iterator; import org.apache.ant.AntException; import org.apache.ant.tasklet.TaskletContext; +import org.apache.avalon.Component; public interface Project + extends Component { // the name of currently executing project String PROJECT = "ant.project.name"; diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java index 04d8b5a5a..46cf41886 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java @@ -8,14 +8,21 @@ package org.apache.ant.project; import org.apache.ant.AntException; +import org.apache.ant.tasklet.TaskletContext; +import org.apache.avalon.Component; import org.apache.avalon.camelot.Deployer; import org.apache.avalon.camelot.Registry; import org.apache.log.Logger; public interface ProjectEngine + extends Component { Deployer getDeployer(); + void addProjectListener( ProjectListener listener ); + void removeProjectListener( ProjectListener listener ); void setLogger( Logger logger ); void execute( Project project, String target ) throws AntException; + void execute( Project project, String target, TaskletContext context ) + throws AntException; } diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectListener.java b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectListener.java index b3b92dea9..844534f2e 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectListener.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectListener.java @@ -7,10 +7,7 @@ */ package org.apache.ant.project; -import org.apache.log.LogTarget; - public interface ProjectListener - extends LogTarget { void projectStarted( String projectName ); void projectFinished(); @@ -20,4 +17,7 @@ public interface ProjectListener void taskletStarted( String taskletName ); void taskletFinished(); + + void log( String message ); + void log( String message, Throwable throwable ); } diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectListenerSupport.java b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectListenerSupport.java new file mode 100644 index 000000000..f0aba8570 --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectListenerSupport.java @@ -0,0 +1,110 @@ +/* + * 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 file. + */ +package org.apache.ant.project; + +public class ProjectListenerSupport + implements ProjectListener +{ + protected ProjectListener[] m_listeners = new ProjectListener[ 0 ]; + + public void addProjectListener( final ProjectListener listener ) + { + final ProjectListener[] listeners = new ProjectListener[ m_listeners.length + 1 ]; + System.arraycopy( m_listeners, 0, listeners, 0, m_listeners.length ); + listeners[ m_listeners.length ] = listener; + m_listeners = listeners; + } + + public void removeProjectListener( final ProjectListener listener ) + { + int found = -1; + + for( int i = 0; i < m_listeners.length; i++ ) + { + if( listener == m_listeners[ i ] ) + { + found = i; + break; + } + } + + if( -1 == found ) return; + + final ProjectListener[] listeners = new ProjectListener[ m_listeners.length - 1 ]; + System.arraycopy( m_listeners, 0, listeners, 0, found ); + + final int count = m_listeners.length - found - 1; + System.arraycopy( m_listeners, found, listeners, found + 1, count ); + + m_listeners = listeners; + } + + public void projectStarted( final String projectName ) + { + for( int i = 0; i < m_listeners.length; i++ ) + { + m_listeners[ i ].projectStarted( projectName ); + } + } + + public void projectFinished() + { + for( int i = 0; i < m_listeners.length; i++ ) + { + m_listeners[ i ].projectFinished(); + } + } + + public void targetStarted( String targetName ) + { + for( int i = 0; i < m_listeners.length; i++ ) + { + m_listeners[ i ].targetStarted( targetName ); + } + } + + public void targetFinished() + { + for( int i = 0; i < m_listeners.length; i++ ) + { + m_listeners[ i ].targetFinished(); + } + } + + public void taskletStarted( String taskletName ) + { + for( int i = 0; i < m_listeners.length; i++ ) + { + m_listeners[ i ].taskletStarted( taskletName ); + } + } + + public void taskletFinished() + { + for( int i = 0; i < m_listeners.length; i++ ) + { + m_listeners[ i ].taskletFinished(); + } + } + + public void log( String message ) + { + for( int i = 0; i < m_listeners.length; i++ ) + { + m_listeners[ i ].log( message ); + } + } + + public void log( String message, Throwable throwable ) + { + for( int i = 0; i < m_listeners.length; i++ ) + { + m_listeners[ i ].log( message, throwable ); + } + } +} diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectToListenerAdapter.java b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectToListenerAdapter.java new file mode 100644 index 000000000..d9d1a8206 --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectToListenerAdapter.java @@ -0,0 +1,40 @@ +/* + * 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 file. + */ +package org.apache.ant.project; + +import org.apache.log.LogEntry; +import org.apache.log.LogTarget; + +public class ProjectToListenerAdapter + implements LogTarget +{ + + protected final ProjectListener m_listener; + + public ProjectToListenerAdapter( final ProjectListener listener ) + { + m_listener = listener; + } + + /** + * Process a log entry. + * + * @param entry the entry + */ + public void processEntry( final LogEntry entry ) + { + if( null == entry.getThrowable() ) + { + m_listener.log( entry.getMessage() ); + } + else + { + m_listener.log( entry.getMessage(), entry.getThrowable() ); + } + } +} diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/Target.java b/proposal/myrmidon/src/java/org/apache/ant/project/Target.java index f86c5e901..1697f98c9 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/Target.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/Target.java @@ -8,8 +8,10 @@ package org.apache.ant.project; import java.util.Iterator; +import org.apache.avalon.Component; public interface Target + extends Component { Iterator getDependencies(); Iterator getTasks(); diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java index 9dc964946..2e095b6ed 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java @@ -40,10 +40,14 @@ public class DefaultTaskletEngine protected TaskletConfigurer m_configurer; protected Logger m_logger; + public void setLogger( final Logger logger ) + { + m_logger = logger; + } + public void contextualize( final Context context ) { m_context = (TaskletContext)context; - m_logger = m_context.getLogger(); } public void compose( final ComponentManager componentManager ) diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java index cf2d576ce..139a88776 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java @@ -11,10 +11,12 @@ import org.apache.ant.AntException; import org.apache.ant.configuration.Configuration; import org.apache.avalon.Composer; import org.apache.avalon.Contextualizable; +import org.apache.log.Logger; public interface TaskletEngine extends Contextualizable, Composer { + void setLogger( Logger logger ); void execute( final Configuration task ) throws AntException; } diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java index ed76ccb23..d93973279 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java @@ -138,6 +138,9 @@ public class TskDeployer key + " due to " + re, re ); } + + m_logger.debug( "Registered converter " + key + " that converts from " + + source + " to " + destination ); } } @@ -158,6 +161,8 @@ public class TskDeployer throw new DeploymentException( "Error registering " + key + " due to " + re, re ); } + + m_logger.debug( "Registered tasklet " + key + " as " + value ); } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/AntCall.java b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/AntCall.java new file mode 100644 index 000000000..b0c019bac --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/AntCall.java @@ -0,0 +1,77 @@ +/* + * 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 file. + */ +package org.apache.ant.tasks.core; + +import java.util.ArrayList; +import org.apache.ant.AntException; +import org.apache.ant.project.ProjectEngine; +import org.apache.ant.project.Project; +import org.apache.ant.tasklet.AbstractTasklet; +import org.apache.ant.tasklet.DefaultTaskletContext; +import org.apache.ant.tasklet.TaskletContext; +import org.apache.avalon.ComponentManager; +import org.apache.avalon.ComponentNotAccessibleException; +import org.apache.avalon.ComponentNotFoundException; +import org.apache.avalon.Composer; + +/** + * This is abstract base class for tasklets. + * + * @author Peter Donald + */ +public class AntCall + extends AbstractTasklet + implements Composer +{ + protected ProjectEngine m_projectEngine; + protected Project m_project; + protected String m_target; + protected ArrayList m_properties = new ArrayList(); + + public void compose( final ComponentManager componentManager ) + throws ComponentNotFoundException, ComponentNotAccessibleException + { + m_projectEngine = (ProjectEngine)componentManager. + lookup( "org.apache.ant.project.ProjectEngine" ); + m_project = (Project)componentManager.lookup( "org.apache.ant.project.Project" ); + } + + public void setTarget( final String target ) + { + m_target = target; + } + + public Property createParam() + { + final Property property = new Property(); + m_properties.add( property ); + return property; + } + + public void run() + throws AntException + { + if( null == m_target ) + { + throw new AntException( "Target attribute must be specified" ); + } + + final TaskletContext context = new DefaultTaskletContext( getContext() ); + + final int size = m_properties.size(); + for( int i = 0; i < size; i++ ) + { + final Property property = (Property)m_properties.get( i ); + property.contextualize( context ); + property.run(); + } + + getLogger().info( "Calling target " + m_target ); + m_projectEngine.execute( m_project, m_target, context ); + } +} diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/ConfigurationTest.java b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/ConfigurationTest.java index 5d18585ef..6b5c30545 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/ConfigurationTest.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/ConfigurationTest.java @@ -42,6 +42,6 @@ public class ConfigurationTest public void run() throws AntException { - getLogger().info( m_message ); + getLogger().warn( m_message ); } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/ContentTest.java b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/ContentTest.java index 08faf803a..4d2b21cc6 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/ContentTest.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/ContentTest.java @@ -20,7 +20,7 @@ public class ContentTest { public void addContent( final Integer value ) { - getLogger().info( "Integer content: " + value ); + getLogger().warn( "Integer content: " + value ); } /* diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/Echo.java b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/Echo.java index 0d5d918e0..193fd6c55 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/Echo.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/Echo.java @@ -28,6 +28,6 @@ public class Echo public void run() throws AntException { - getLogger().info( m_message ); + getLogger().warn( m_message ); } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/PrimitiveTypesTest.java b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/PrimitiveTypesTest.java index 121e0f3ff..08509c177 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/PrimitiveTypesTest.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/PrimitiveTypesTest.java @@ -20,67 +20,67 @@ public class PrimitiveTypesTest { public void setInteger( final Integer value ) { - getLogger().info( "setInteger( " + value + " );" ); + getLogger().warn( "setInteger( " + value + " );" ); } public void setInteger2( final int value ) { - getLogger().info( "setInteger2( " + value + " );" ); + getLogger().warn( "setInteger2( " + value + " );" ); } public void setShort( final Short value ) { - getLogger().info( "setShort( " + value + " );" ); + getLogger().warn( "setShort( " + value + " );" ); } public void setShort2( final short value ) { - getLogger().info( "setShort2( " + value + " );" ); + getLogger().warn( "setShort2( " + value + " );" ); } public void setByte( final Byte value ) { - getLogger().info( "setByte( " + value + " );" ); + getLogger().warn( "setByte( " + value + " );" ); } public void setByte2( final byte value ) { - getLogger().info( "setByte2( " + value + " );" ); + getLogger().warn( "setByte2( " + value + " );" ); } public void setLong( final Long value ) { - getLogger().info( "setLong( " + value + " );" ); + getLogger().warn( "setLong( " + value + " );" ); } public void setLong2( final long value ) { - getLogger().info( "setLong2( " + value + " );" ); + getLogger().warn( "setLong2( " + value + " );" ); } public void setFloat( final Float value ) { - getLogger().info( "setFloat( " + value + " );" ); + getLogger().warn( "setFloat( " + value + " );" ); } public void setFloat2( final float value ) { - getLogger().info( "setFloat2( " + value + " );" ); + getLogger().warn( "setFloat2( " + value + " );" ); } public void setDouble( final Double value ) { - getLogger().info( "setDouble( " + value + " );" ); + getLogger().warn( "setDouble( " + value + " );" ); } public void setDouble2( final double value ) { - getLogger().info( "setDouble2( " + value + " );" ); + getLogger().warn( "setDouble2( " + value + " );" ); } public void setString( final String value ) { - getLogger().info( "setString( " + value + " );" ); + getLogger().warn( "setString( " + value + " );" ); } public void run() diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/RegisterTasklet.java b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/RegisterTasklet.java new file mode 100644 index 000000000..99595e65e --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/RegisterTasklet.java @@ -0,0 +1,102 @@ +/* + * 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 file. + */ +package org.apache.ant.tasks.core; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import org.apache.ant.AntException; +import org.apache.ant.tasklet.AbstractTasklet; +import org.apache.ant.tasklet.engine.DefaultTaskletInfo; +import org.apache.ant.tasklet.engine.TaskletRegistry; +import org.apache.avalon.ComponentManager; +import org.apache.avalon.ComponentNotAccessibleException; +import org.apache.avalon.ComponentNotFoundException; +import org.apache.avalon.Composer; +import org.apache.avalon.camelot.RegistryException; + +/** + * Method to register a single tasklet. + * + * @author Peter Donald + */ +public class RegisterTasklet + extends AbstractTasklet + implements Composer +{ + protected TaskletRegistry m_taskletRegistry; + protected String m_tasklib; + protected String m_taskName; + protected String m_classname; + + public void compose( final ComponentManager componentManager ) + throws ComponentNotFoundException, ComponentNotAccessibleException + { + m_taskletRegistry = (TaskletRegistry)componentManager. + lookup( "org.apache.ant.tasklet.engine.TaskletRegistry" ); + } + + public void setTaskLib( final String tasklib ) + { + m_tasklib = tasklib; + } + + public void setTaskName( final String taskName ) + { + m_taskName = taskName; + } + + public void setClassname( final String classname ) + { + m_classname = classname; + } + + public void run() + throws AntException + { + if( null == m_tasklib ) + { + throw new AntException( "Must specify tasklib parameter" ); + } + + if( null == m_taskName ) + { + throw new AntException( "Must specify taskname parameter" ); + } + + if( null == m_classname ) + { + m_classname = getDefaultClassName(); + } + + try + { + final File tasklib = new File( getContext().resolveFilename( m_tasklib ) ); + final URL url = tasklib.toURL(); + + final DefaultTaskletInfo info = new DefaultTaskletInfo( m_classname, url ); + + m_taskletRegistry.register( m_taskName, info ); + } + catch( final MalformedURLException mue ) + { + throw new AntException( "Malformed task-lib parameter " + m_tasklib, mue ); + } + catch( final RegistryException re ) + { + throw new AntException( "Error registering " + m_taskName + " due to " + re, re ); + } + } + + protected String getDefaultClassName() + throws AntException + { + //TODO: + throw new AntException( "Not yet capable of automagically finding classname" ); + } +} diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/taskdefs.properties b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/taskdefs.properties index f3476cfb9..73f28858e 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasks/core/taskdefs.properties +++ b/proposal/myrmidon/src/java/org/apache/ant/tasks/core/taskdefs.properties @@ -4,4 +4,6 @@ prim-test=org.apache.ant.tasks.core.PrimitiveTypesTest sub-elements-test=org.apache.ant.tasks.core.SubElementTest conf-test=org.apache.ant.tasks.core.ConfigurationTest content-test=org.apache.ant.tasks.core.ContentTest -property=org.apache.ant.tasks.core.Property \ No newline at end of file +property=org.apache.ant.tasks.core.Property +register-tasklet=org.apache.ant.tasks.core.RegisterTasklet +ant-call=org.apache.ant.tasks.core.AntCall \ No newline at end of file diff --git a/proposal/myrmidon/src/make/sample.xmk b/proposal/myrmidon/src/make/sample.xmk index db04135d8..79467fdf2 100644 --- a/proposal/myrmidon/src/make/sample.xmk +++ b/proposal/myrmidon/src/make/sample.xmk @@ -58,7 +58,17 @@ Legal: + + + + + + + + diff --git a/proposal/myrmidon/src/manifest/ant-manifest.mf b/proposal/myrmidon/src/manifest/ant-manifest.mf new file mode 100644 index 000000000..13658dff5 --- /dev/null +++ b/proposal/myrmidon/src/manifest/ant-manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: org.apache.ant.launcher.AntLoader +Created-By: Apache Ant Project \ No newline at end of file diff --git a/proposal/myrmidon/src/manifest/myrmidon-manifest.mf b/proposal/myrmidon/src/manifest/myrmidon-manifest.mf new file mode 100644 index 000000000..54d5fd052 --- /dev/null +++ b/proposal/myrmidon/src/manifest/myrmidon-manifest.mf @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Main-Class: org.apache.ant.Main +Class-Path: avalonapi.jar +Created-By: Apache Ant Project \ No newline at end of file diff --git a/proposal/myrmidon/src/script/ant b/proposal/myrmidon/src/script/ant index 9667d7de9..d215b85a8 100644 --- a/proposal/myrmidon/src/script/ant +++ b/proposal/myrmidon/src/script/ant @@ -6,7 +6,6 @@ fi # Cygwin support. if [ "$OSTYPE" == "cygwin32" ] || [ "$OSTYPE" = "cygwin" ]; then - if [ ! "$JAVA_HOME" = "" ]; then JAVA_HOME=`cygpath --path --unix $JAVA_HOME` fi @@ -28,31 +27,19 @@ done ANT_HOME=`dirname "$PRG"`/.. -# Allow .antrc to specifiy flags to java cmd -if [ "$JAVACMD" = "" ] ; then - JAVACMD=java -fi - -LOCALCLASSPATH=`echo $ANT_HOME/lib/*.jar | tr ' ' ':'` +if [ "$JAVA_HOME" == "" ] ; then -if [ "$CLASSPATH" != "" ] ; then - LOCALCLASSPATH=$CLASSPATH:$LOCALCLASSPATH -fi - -if [ "$JAVA_HOME" != "" ] ; then - if test -f $JAVA_HOME/lib/tools.jar ; then - LOCALCLASSPATH=$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar - fi -else echo "Warning: JAVA_HOME environment variable is not set." echo " If build fails because sun.* classes could not be found" echo " you will need to set the JAVA_HOME environment variable" echo " to the installation directory of java." + if [ "$JAVACMD" = "" ] ; then + JAVACMD=java + fi +else + if [ "$JAVACMD" = "" ] ; then + JAVACMD=$JAVA_HOME/bin/java + fi fi -# More Cygwin support -if [ "$OSTYPE" == "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] ; then - LOCALCLASSPATH=`cygpath --path --windows "$LOCALCLASSPATH"` -fi - -$JAVACMD -classpath $LOCALCLASSPATH $ANT_OPTS org.apache.ant.Main --ant-home=${ANT_HOME} $@ \ No newline at end of file +$JAVACMD $ANT_OPTS -jar ant.jar --ant-home=${ANT_HOME} $@ \ No newline at end of file diff --git a/proposal/myrmidon/src/script/ant.bat b/proposal/myrmidon/src/script/ant.bat index af3a91dc9..41a315a9d 100644 --- a/proposal/myrmidon/src/script/ant.bat +++ b/proposal/myrmidon/src/script/ant.bat @@ -1,8 +1,8 @@ @echo off -:checkJava -if "%JAVACMD%" == "" set JAVACMD=%JAVA_HOME%\bin\java -if not "%JAVA_HOME%" == "" goto setupClasspath +if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat" + +if not "%JAVA_HOME%" == "" goto javaCmdSetup echo. echo Warning: JAVA_HOME environment variable is not set. @@ -12,11 +12,17 @@ echo to the installation directory of java. echo. goto end -:setupClasspath -set LOCALCLASSPATH=lib\xerces.jar;lib\ant.jar;lib\avalonapi.jar;%JAVA_HOME%\lib\tools.jar +rem hope that there is java command in path +if "%JAVACMD%" == "" set JAVACMD=java +goto argSetup -set THIS_FILE=%0 +rem if JAVA_HOME is set then make sure we use that java exe +:javaCmdSetup +if "%JAVACMD%" == "" set JAVACMD=%JAVA_HOME%\bin\java + +:argSetup +set THIS_FILE=%0 set ANT_CMD_LINE_ARGS= rem Slurp all args... @@ -29,7 +35,9 @@ goto setupArgs :doneArgs rem Mmmmmm tasty - finished slurping args -%JAVACMD% -classpath "%LOCALCLASSPATH%" %ANT_OPTS% org.apache.ant.Main "--bin-dir=%THIS_FILE%" %ANT_CMD_LINE_ARGS% +%JAVACMD% %ANT_OPTS% -jar lib\ant.jar "--bin-dir=%THIS_FILE%" %ANT_CMD_LINE_ARGS% :end -set LOCALCLASSPATH= \ No newline at end of file +if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat" +set THIS_FILE= +set ANT_CMD_LINE_ARGS= \ No newline at end of file