* 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-ffa450edef68master
| @@ -156,11 +156,13 @@ Legal: | |||||
| optimize="${optimize}" | optimize="${optimize}" | ||||
| deprecation="${deprecation}" /> | deprecation="${deprecation}" /> | ||||
| <!-- | |||||
| <copy todir="${build.classes}"> | <copy todir="${build.classes}"> | ||||
| <fileset dir="${build.src}"> | <fileset dir="${build.src}"> | ||||
| <exclude name="**/*.properties"/> | |||||
| <include name="**/*.properties"/> | |||||
| </fileset> | </fileset> | ||||
| </copy> | </copy> | ||||
| --> | |||||
| <mkdir dir="${build.classes}/TASK-LIB"/> | <mkdir dir="${build.classes}/TASK-LIB"/> | ||||
| <copy file="${build.src}/org/apache/ant/tasks/core/taskdefs.properties" | <copy file="${build.src}/org/apache/ant/tasks/core/taskdefs.properties" | ||||
| @@ -175,8 +177,24 @@ Legal: | |||||
| =================================================================== | =================================================================== | ||||
| --> | --> | ||||
| <target name="jar-ant" depends="compile"> | <target name="jar-ant" depends="compile"> | ||||
| <jar jarfile="${build.lib}/ant.jar" basedir="${build.classes}"> | |||||
| <jar jarfile="${build.lib}/ant.jar" | |||||
| basedir="${build.classes}" | |||||
| manifest="${manifest.dir}/ant-manifest.mf"> | |||||
| <include name="org/apache/ant/launcher/*" /> | |||||
| </jar> | |||||
| </target> | |||||
| <!-- | |||||
| =================================================================== | |||||
| Creates the myrmidon.jar file | |||||
| =================================================================== | |||||
| --> | |||||
| <target name="jar-myrmidon" depends="compile"> | |||||
| <jar jarfile="${build.lib}/myrmidon.jar" | |||||
| basedir="${build.classes}" | |||||
| manifest="${manifest.dir}/myrmidon-manifest.mf"> | |||||
| <include name="org/apache/ant/**" /> | <include name="org/apache/ant/**" /> | ||||
| <exclude name="org/apache/ant/launcher/*" /> | |||||
| <exclude name="org/apache/ant/tasks/**" /> | <exclude name="org/apache/ant/tasks/**" /> | ||||
| <exclude name="org/apache/ant/convert/core/**" /> | <exclude name="org/apache/ant/convert/core/**" /> | ||||
| </jar> | </jar> | ||||
| @@ -200,7 +218,7 @@ Legal: | |||||
| Creates the distribution | Creates the distribution | ||||
| =================================================================== | =================================================================== | ||||
| --> | --> | ||||
| <target name="dist" depends="jar-ant,jar-core"> | |||||
| <target name="dist" depends="jar-ant,jar-core,jar-myrmidon"> | |||||
| <mkdir dir="${dist.dir}"/> | <mkdir dir="${dist.dir}"/> | ||||
| <mkdir dir="${dist.bin}"/> | <mkdir dir="${dist.bin}"/> | ||||
| <mkdir dir="${dist.lib}"/> | <mkdir dir="${dist.lib}"/> | ||||
| @@ -18,13 +18,15 @@ import java.net.URL; | |||||
| import java.net.URLClassLoader; | import java.net.URLClassLoader; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.HashMap; | import java.util.HashMap; | ||||
| import java.util.List; | |||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import java.util.List; | |||||
| import org.apache.ant.launcher.AntLoader; | |||||
| import org.apache.ant.project.DefaultProjectEngine; | import org.apache.ant.project.DefaultProjectEngine; | ||||
| import org.apache.ant.project.Project; | import org.apache.ant.project.Project; | ||||
| import org.apache.ant.project.ProjectBuilder; | import org.apache.ant.project.ProjectBuilder; | ||||
| import org.apache.ant.project.ProjectEngine; | import org.apache.ant.project.ProjectEngine; | ||||
| import org.apache.ant.project.ProjectListener; | import org.apache.ant.project.ProjectListener; | ||||
| import org.apache.ant.project.ProjectToListenerAdapter; | |||||
| import org.apache.ant.tasklet.JavaVersion; | import org.apache.ant.tasklet.JavaVersion; | ||||
| import org.apache.ant.tasklet.TaskletContext; | import org.apache.ant.tasklet.TaskletContext; | ||||
| import org.apache.avalon.Disposable; | import org.apache.avalon.Disposable; | ||||
| @@ -57,10 +59,14 @@ public class Main | |||||
| public final static String VERSION = | public final static String VERSION = | ||||
| "Ant " + BUILD_VERSION + " compiled on " + BUILD_DATE; | "Ant " + BUILD_VERSION + " compiled on " + BUILD_DATE; | ||||
| protected final static String DEFAULT_LOGLEVEL = "INFO"; | |||||
| protected final static String DEFAULT_LIB_DIRECTORY = ".." + File.separator + "lib"; | |||||
| protected final static String DEFAULT_LOGLEVEL = "WARN"; | |||||
| protected final static String DEFAULT_LIB_DIRECTORY = "lib"; | |||||
| protected final static String DEFAULT_TASKLIB_DIRECTORY = DEFAULT_LIB_DIRECTORY; | protected final static String DEFAULT_TASKLIB_DIRECTORY = DEFAULT_LIB_DIRECTORY; | ||||
| protected final static String DEFAULT_FILENAME = "build.xmk"; | protected final static String DEFAULT_FILENAME = "build.xmk"; | ||||
| protected final static String DEFAULT_ENGINE = | |||||
| "org.apache.ant.project.DefaultProjectEngine"; | |||||
| protected final static String DEFAULT_LISTENER = | protected final static String DEFAULT_LISTENER = | ||||
| "org.apache.ant.project.DefaultProjectListener"; | "org.apache.ant.project.DefaultProjectListener"; | ||||
| @@ -82,7 +88,7 @@ public class Main | |||||
| private static final int HOME_DIR_OPT = 7; | private static final int HOME_DIR_OPT = 7; | ||||
| //incompatable options for info options | //incompatable options for info options | ||||
| private static final int INFO_OPT_INCOMPAT[] = new int[] | |||||
| private static final int[] INFO_OPT_INCOMPAT = new int[] | |||||
| { | { | ||||
| HELP_OPT, QUIET_OPT, VERBOSE_OPT, FILE_OPT, | HELP_OPT, QUIET_OPT, VERBOSE_OPT, FILE_OPT, | ||||
| LOG_LEVEL_OPT, VERSION_OPT, LISTENER_OPT, | LOG_LEVEL_OPT, VERSION_OPT, LISTENER_OPT, | ||||
| @@ -91,13 +97,14 @@ public class Main | |||||
| }; | }; | ||||
| //incompatable options for other logging options | //incompatable options for other logging options | ||||
| private static final int LOG_OPT_INCOMPAT[] = new int[] | |||||
| private static final int[] LOG_OPT_INCOMPAT = new int[] | |||||
| { | { | ||||
| QUIET_OPT, VERBOSE_OPT, LOG_LEVEL_OPT | QUIET_OPT, VERBOSE_OPT, LOG_LEVEL_OPT | ||||
| }; | }; | ||||
| protected Logger m_logger; | protected Logger m_logger; | ||||
| protected ProjectListener m_listener; | |||||
| protected File m_binDir; | protected File m_binDir; | ||||
| protected File m_homeDir; | protected File m_homeDir; | ||||
| protected File m_libDir; | protected File m_libDir; | ||||
| @@ -105,7 +112,7 @@ public class Main | |||||
| protected File m_buildFile; | protected File m_buildFile; | ||||
| protected File m_userDir; | protected File m_userDir; | ||||
| public static void main( final String args[] ) | |||||
| public static void main( final String[] args ) | |||||
| { | { | ||||
| final Main main = new Main(); | final Main main = new Main(); | ||||
| @@ -128,7 +135,7 @@ public class Main | |||||
| protected CLOptionDescriptor[] createCLOptions() | protected CLOptionDescriptor[] createCLOptions() | ||||
| { | { | ||||
| //TODO: localise | //TODO: localise | ||||
| final CLOptionDescriptor options[] = new CLOptionDescriptor[ 13 ]; | |||||
| final CLOptionDescriptor[] options = new CLOptionDescriptor[ 13 ]; | |||||
| options[0] = | options[0] = | ||||
| new CLOptionDescriptor( "help", | new CLOptionDescriptor( "help", | ||||
| @@ -291,9 +298,9 @@ public class Main | |||||
| m_taskLibDir = getTaskLibDir( m_homeDir, taskLibDir ); | m_taskLibDir = getTaskLibDir( m_homeDir, taskLibDir ); | ||||
| m_buildFile = getFile( filename ); | m_buildFile = getFile( filename ); | ||||
| m_logger.info( "Ant Base Directory: " + m_homeDir ); | |||||
| m_logger.warn( "Ant Build File: " + m_buildFile ); | |||||
| m_logger.info( "Ant Home Directory: " + m_homeDir ); | |||||
| m_logger.info( "Ant Bin Directory: " + m_binDir ); | m_logger.info( "Ant Bin Directory: " + m_binDir ); | ||||
| m_logger.info( "Ant Build File: " + m_buildFile ); | |||||
| m_logger.debug( "Ant Lib Directory: " + m_libDir ); | m_logger.debug( "Ant Lib Directory: " + m_libDir ); | ||||
| m_logger.debug( "Ant Task Lib Directory: " + m_taskLibDir ); | m_logger.debug( "Ant Task Lib Directory: " + m_taskLibDir ); | ||||
| @@ -310,6 +317,8 @@ public class Main | |||||
| ((Initializable)engine).init(); | ((Initializable)engine).init(); | ||||
| } | } | ||||
| engine.addProjectListener( m_listener ); | |||||
| deployDefaultTaskLibs( engine, m_taskLibDir ); | deployDefaultTaskLibs( engine, m_taskLibDir ); | ||||
| BufferedReader reader = null; | BufferedReader reader = null; | ||||
| @@ -343,10 +352,9 @@ public class Main | |||||
| final File taskLibDirectory ) | final File taskLibDirectory ) | ||||
| { | { | ||||
| final ExtensionFileFilter filter = | |||||
| new ExtensionFileFilter( new String[] { ".tsk" } ); | |||||
| final ExtensionFileFilter filter = new ExtensionFileFilter( ".tsk" ); | |||||
| final File files[] = taskLibDirectory.listFiles( filter ); | |||||
| final File[] files = taskLibDirectory.listFiles( filter ); | |||||
| final Deployer deployer = engine.getDeployer(); | final Deployer deployer = engine.getDeployer(); | ||||
| for( int i = 0; i < files.length; i++ ) | for( int i = 0; i < files.length; i++ ) | ||||
| @@ -401,36 +409,35 @@ public class Main | |||||
| protected void setupListener( final String listenerName ) | protected void setupListener( final String listenerName ) | ||||
| { | { | ||||
| final ProjectListener listener = createListener( listenerName ); | |||||
| m_logger.addLogTarget( listener ); | |||||
| m_listener = createListener( listenerName ); | |||||
| m_logger.addLogTarget( new ProjectToListenerAdapter( m_listener ) ); | |||||
| } | } | ||||
| protected void setupContextClassLoader( final File libDir ) | protected void setupContextClassLoader( final File libDir ) | ||||
| { | { | ||||
| final ClassLoader classLoader = createClassLoader( libDir ); | |||||
| Thread.currentThread().setContextClassLoader( classLoader ); | |||||
| setupClassLoader( libDir ); | |||||
| Thread.currentThread().setContextClassLoader( AntLoader.getLoader() ); | |||||
| } | } | ||||
| protected ClassLoader createClassLoader( final File libDir ) | |||||
| protected void setupClassLoader( final File libDir ) | |||||
| { | { | ||||
| final ExtensionFileFilter filter = | final ExtensionFileFilter filter = | ||||
| new ExtensionFileFilter( new String[] { ".jar", ".zip" } ); | new ExtensionFileFilter( new String[] { ".jar", ".zip" } ); | ||||
| final ArrayList urlList = new ArrayList(); | |||||
| toURLS( urlList, libDir.listFiles( filter ) ); | |||||
| final URL urls[] = (URL[])urlList.toArray( new URL[0] ); | |||||
| final File[] files = libDir.listFiles( filter ); | |||||
| return new URLClassLoader( urls, ClassLoader.getSystemClassLoader() ); | |||||
| } | |||||
| final AntLoader classLoader = AntLoader.getLoader(); | |||||
| protected void toURLS( final ArrayList urls, final File files[] ) | |||||
| { | |||||
| for( int i = 0; i < files.length; i++ ) | for( int i = 0; i < files.length; i++ ) | ||||
| { | { | ||||
| try { urls.add( files[ i ].toURL() ); } | |||||
| catch( final MalformedURLException mue ) {} | |||||
| } | |||||
| if( !files[ i ].getName().equals( "ant.jar" ) && | |||||
| !files[ i ].getName().equals( "myrmidon.jar" ) && | |||||
| !files[ i ].getName().equals( "avalonapi.jar" ) ) | |||||
| { | |||||
| try { classLoader.addURL( files[ i ].toURL() ); } | |||||
| catch( final MalformedURLException mue ) {} | |||||
| } | |||||
| } | |||||
| } | } | ||||
| protected Project getProject( final String builderName, final File file ) | protected Project getProject( final String builderName, final File file ) | ||||
| @@ -497,7 +504,7 @@ public class Main | |||||
| protected ProjectEngine createProjectEngine() | protected ProjectEngine createProjectEngine() | ||||
| { | { | ||||
| return new DefaultProjectEngine(); | |||||
| return (ProjectEngine)createObject( DEFAULT_ENGINE, "project-engine" ); | |||||
| } | } | ||||
| protected File getHomeDir( final String homeDir ) | protected File getHomeDir( final String homeDir ) | ||||
| @@ -760,11 +767,11 @@ public class Main | |||||
| { | { | ||||
| try | try | ||||
| { | { | ||||
| final Class clazz = Class.forName( objectName ); | |||||
| final Class clazz = Class.forName( objectName ); | |||||
| return clazz.newInstance(); | return clazz.newInstance(); | ||||
| } | } | ||||
| catch( final IllegalAccessException iae ) | catch( final IllegalAccessException iae ) | ||||
| { | |||||
| { | |||||
| throw new AntException( "Non-public constructor for " + type + " " + objectName, | throw new AntException( "Non-public constructor for " + type + " " + objectName, | ||||
| iae ); | iae ); | ||||
| } | } | ||||
| @@ -22,13 +22,14 @@ public class DefaultConverterLoader | |||||
| { | { | ||||
| public DefaultConverterLoader() | public DefaultConverterLoader() | ||||
| { | { | ||||
| super( new URLClassLoader( new URL[0], | |||||
| super( new URLClassLoader( new URL[0], | |||||
| Thread.currentThread().getContextClassLoader() ) ); | Thread.currentThread().getContextClassLoader() ) ); | ||||
| } | } | ||||
| public DefaultConverterLoader( final URL location ) | public DefaultConverterLoader( final URL location ) | ||||
| { | { | ||||
| super( new URLClassLoader( new URL[] { location } ) ); | |||||
| super( new URLClassLoader( new URL[] { location }, | |||||
| Thread.currentThread().getContextClassLoader() ) ); | |||||
| } | } | ||||
| public Converter loadConverter( final String converter ) | public Converter loadConverter( final String converter ) | ||||
| @@ -0,0 +1,64 @@ | |||||
| /* | |||||
| * 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.launcher; | |||||
| import java.lang.reflect.Method; | |||||
| import java.net.URL; | |||||
| import java.net.URLClassLoader; | |||||
| /** | |||||
| * AvalonLoader is the class that bootstraps and installs the security manager. | |||||
| * | |||||
| * @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||||
| */ | |||||
| 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 ); | |||||
| } | |||||
| } | |||||
| @@ -32,39 +32,52 @@ import org.apache.log.Logger; | |||||
| public class DefaultProjectEngine | public class DefaultProjectEngine | ||||
| implements ProjectEngine, Initializable, Disposable | 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 ) | public void setLogger( final Logger logger ) | ||||
| { | { | ||||
| m_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() | public void init() | ||||
| throws Exception | throws Exception | ||||
| { | { | ||||
| m_listenerSupport = new ProjectListenerSupport(); | |||||
| m_taskletEngine = createTaskletEngine(); | m_taskletEngine = createTaskletEngine(); | ||||
| m_taskletEngine.setLogger( m_logger ); | |||||
| m_taskletRegistry = createTaskletRegistry(); | m_taskletRegistry = createTaskletRegistry(); | ||||
| m_converterRegistry = createConverterRegistry(); | m_converterRegistry = createConverterRegistry(); | ||||
| m_deployer = createDeployer(); | 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 ) | if( m_taskletEngine instanceof Initializable ) | ||||
| { | { | ||||
| @@ -112,15 +125,36 @@ public class DefaultProjectEngine | |||||
| public void execute( final Project project, final String target ) | public void execute( final Project project, final String target ) | ||||
| throws AntException | throws AntException | ||||
| { | { | ||||
| m_taskletEngine.contextualize( project.getContext() ); | |||||
| executeTarget( "<init>", 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( "<init>", 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, | protected void execute( final Project project, | ||||
| final String targetName, | final String targetName, | ||||
| final TaskletContext context, | |||||
| final ArrayList done ) | final ArrayList done ) | ||||
| throws AntException | throws AntException | ||||
| { | { | ||||
| @@ -139,45 +173,67 @@ public class DefaultProjectEngine | |||||
| final String dependency = (String)dependencies.next(); | final String dependency = (String)dependencies.next(); | ||||
| if( !done.contains( dependency ) ) | 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(); | final Iterator tasks = target.getTasks(); | ||||
| while( tasks.hasNext() ) | while( tasks.hasNext() ) | ||||
| { | { | ||||
| final Configuration task = (Configuration)tasks.next(); | 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 | throws AntException | ||||
| { | { | ||||
| final String name = configuration.getName(); | final String name = configuration.getName(); | ||||
| m_logger.debug( "Executing task " + name ); | 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 ); | m_taskletEngine.execute( configuration ); | ||||
| //notify listeners task has ended | |||||
| m_listenerSupport.taskletFinished(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -7,25 +7,13 @@ | |||||
| */ | */ | ||||
| package org.apache.ant.project; | 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 | public class DefaultProjectListener | ||||
| extends DefaultOutputLogTarget | |||||
| implements ProjectListener | implements ProjectListener | ||||
| { | { | ||||
| protected String m_prefix; | 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 ) | public void projectStarted( final String projectName ) | ||||
| { | { | ||||
| output( "Starting project " + projectName + "\n" ); | output( "Starting project " + projectName + "\n" ); | ||||
| @@ -54,9 +42,19 @@ public class DefaultProjectListener | |||||
| m_prefix = null; | 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 ) | 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 ); | |||||
| } | } | ||||
| } | } | ||||
| @@ -10,8 +10,10 @@ package org.apache.ant.project; | |||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.ant.AntException; | import org.apache.ant.AntException; | ||||
| import org.apache.ant.tasklet.TaskletContext; | import org.apache.ant.tasklet.TaskletContext; | ||||
| import org.apache.avalon.Component; | |||||
| public interface Project | public interface Project | ||||
| extends Component | |||||
| { | { | ||||
| // the name of currently executing project | // the name of currently executing project | ||||
| String PROJECT = "ant.project.name"; | String PROJECT = "ant.project.name"; | ||||
| @@ -8,14 +8,21 @@ | |||||
| package org.apache.ant.project; | package org.apache.ant.project; | ||||
| import org.apache.ant.AntException; | 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.Deployer; | ||||
| import org.apache.avalon.camelot.Registry; | import org.apache.avalon.camelot.Registry; | ||||
| import org.apache.log.Logger; | import org.apache.log.Logger; | ||||
| public interface ProjectEngine | public interface ProjectEngine | ||||
| extends Component | |||||
| { | { | ||||
| Deployer getDeployer(); | Deployer getDeployer(); | ||||
| void addProjectListener( ProjectListener listener ); | |||||
| void removeProjectListener( ProjectListener listener ); | |||||
| void setLogger( Logger logger ); | void setLogger( Logger logger ); | ||||
| void execute( Project project, String target ) | void execute( Project project, String target ) | ||||
| throws AntException; | throws AntException; | ||||
| void execute( Project project, String target, TaskletContext context ) | |||||
| throws AntException; | |||||
| } | } | ||||
| @@ -7,10 +7,7 @@ | |||||
| */ | */ | ||||
| package org.apache.ant.project; | package org.apache.ant.project; | ||||
| import org.apache.log.LogTarget; | |||||
| public interface ProjectListener | public interface ProjectListener | ||||
| extends LogTarget | |||||
| { | { | ||||
| void projectStarted( String projectName ); | void projectStarted( String projectName ); | ||||
| void projectFinished(); | void projectFinished(); | ||||
| @@ -20,4 +17,7 @@ public interface ProjectListener | |||||
| void taskletStarted( String taskletName ); | void taskletStarted( String taskletName ); | ||||
| void taskletFinished(); | void taskletFinished(); | ||||
| void log( String message ); | |||||
| void log( String message, Throwable throwable ); | |||||
| } | } | ||||
| @@ -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 ); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -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() ); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -8,8 +8,10 @@ | |||||
| package org.apache.ant.project; | package org.apache.ant.project; | ||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import org.apache.avalon.Component; | |||||
| public interface Target | public interface Target | ||||
| extends Component | |||||
| { | { | ||||
| Iterator getDependencies(); | Iterator getDependencies(); | ||||
| Iterator getTasks(); | Iterator getTasks(); | ||||
| @@ -40,10 +40,14 @@ public class DefaultTaskletEngine | |||||
| protected TaskletConfigurer m_configurer; | protected TaskletConfigurer m_configurer; | ||||
| protected Logger m_logger; | protected Logger m_logger; | ||||
| public void setLogger( final Logger logger ) | |||||
| { | |||||
| m_logger = logger; | |||||
| } | |||||
| public void contextualize( final Context context ) | public void contextualize( final Context context ) | ||||
| { | { | ||||
| m_context = (TaskletContext)context; | m_context = (TaskletContext)context; | ||||
| m_logger = m_context.getLogger(); | |||||
| } | } | ||||
| public void compose( final ComponentManager componentManager ) | public void compose( final ComponentManager componentManager ) | ||||
| @@ -11,10 +11,12 @@ import org.apache.ant.AntException; | |||||
| import org.apache.ant.configuration.Configuration; | import org.apache.ant.configuration.Configuration; | ||||
| import org.apache.avalon.Composer; | import org.apache.avalon.Composer; | ||||
| import org.apache.avalon.Contextualizable; | import org.apache.avalon.Contextualizable; | ||||
| import org.apache.log.Logger; | |||||
| public interface TaskletEngine | public interface TaskletEngine | ||||
| extends Contextualizable, Composer | extends Contextualizable, Composer | ||||
| { | { | ||||
| void setLogger( Logger logger ); | |||||
| void execute( final Configuration task ) | void execute( final Configuration task ) | ||||
| throws AntException; | throws AntException; | ||||
| } | } | ||||
| @@ -138,6 +138,9 @@ public class TskDeployer | |||||
| key + " due to " + re, | key + " due to " + re, | ||||
| 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, | throw new DeploymentException( "Error registering " + key + " due to " + re, | ||||
| re ); | re ); | ||||
| } | } | ||||
| m_logger.debug( "Registered tasklet " + key + " as " + value ); | |||||
| } | } | ||||
| } | } | ||||
| @@ -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 <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||||
| */ | |||||
| 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 ); | |||||
| } | |||||
| } | |||||
| @@ -42,6 +42,6 @@ public class ConfigurationTest | |||||
| public void run() | public void run() | ||||
| throws AntException | throws AntException | ||||
| { | { | ||||
| getLogger().info( m_message ); | |||||
| getLogger().warn( m_message ); | |||||
| } | } | ||||
| } | } | ||||
| @@ -20,7 +20,7 @@ public class ContentTest | |||||
| { | { | ||||
| public void addContent( final Integer value ) | public void addContent( final Integer value ) | ||||
| { | { | ||||
| getLogger().info( "Integer content: " + value ); | |||||
| getLogger().warn( "Integer content: " + value ); | |||||
| } | } | ||||
| /* | /* | ||||
| @@ -28,6 +28,6 @@ public class Echo | |||||
| public void run() | public void run() | ||||
| throws AntException | throws AntException | ||||
| { | { | ||||
| getLogger().info( m_message ); | |||||
| getLogger().warn( m_message ); | |||||
| } | } | ||||
| } | } | ||||
| @@ -20,67 +20,67 @@ public class PrimitiveTypesTest | |||||
| { | { | ||||
| public void setInteger( final Integer value ) | public void setInteger( final Integer value ) | ||||
| { | { | ||||
| getLogger().info( "setInteger( " + value + " );" ); | |||||
| getLogger().warn( "setInteger( " + value + " );" ); | |||||
| } | } | ||||
| public void setInteger2( final int value ) | public void setInteger2( final int value ) | ||||
| { | { | ||||
| getLogger().info( "setInteger2( " + value + " );" ); | |||||
| getLogger().warn( "setInteger2( " + value + " );" ); | |||||
| } | } | ||||
| public void setShort( final Short value ) | public void setShort( final Short value ) | ||||
| { | { | ||||
| getLogger().info( "setShort( " + value + " );" ); | |||||
| getLogger().warn( "setShort( " + value + " );" ); | |||||
| } | } | ||||
| public void setShort2( final short value ) | public void setShort2( final short value ) | ||||
| { | { | ||||
| getLogger().info( "setShort2( " + value + " );" ); | |||||
| getLogger().warn( "setShort2( " + value + " );" ); | |||||
| } | } | ||||
| public void setByte( final Byte value ) | public void setByte( final Byte value ) | ||||
| { | { | ||||
| getLogger().info( "setByte( " + value + " );" ); | |||||
| getLogger().warn( "setByte( " + value + " );" ); | |||||
| } | } | ||||
| public void setByte2( final byte value ) | public void setByte2( final byte value ) | ||||
| { | { | ||||
| getLogger().info( "setByte2( " + value + " );" ); | |||||
| getLogger().warn( "setByte2( " + value + " );" ); | |||||
| } | } | ||||
| public void setLong( final Long value ) | public void setLong( final Long value ) | ||||
| { | { | ||||
| getLogger().info( "setLong( " + value + " );" ); | |||||
| getLogger().warn( "setLong( " + value + " );" ); | |||||
| } | } | ||||
| public void setLong2( final long value ) | public void setLong2( final long value ) | ||||
| { | { | ||||
| getLogger().info( "setLong2( " + value + " );" ); | |||||
| getLogger().warn( "setLong2( " + value + " );" ); | |||||
| } | } | ||||
| public void setFloat( final Float value ) | public void setFloat( final Float value ) | ||||
| { | { | ||||
| getLogger().info( "setFloat( " + value + " );" ); | |||||
| getLogger().warn( "setFloat( " + value + " );" ); | |||||
| } | } | ||||
| public void setFloat2( final float value ) | public void setFloat2( final float value ) | ||||
| { | { | ||||
| getLogger().info( "setFloat2( " + value + " );" ); | |||||
| getLogger().warn( "setFloat2( " + value + " );" ); | |||||
| } | } | ||||
| public void setDouble( final Double value ) | public void setDouble( final Double value ) | ||||
| { | { | ||||
| getLogger().info( "setDouble( " + value + " );" ); | |||||
| getLogger().warn( "setDouble( " + value + " );" ); | |||||
| } | } | ||||
| public void setDouble2( final double value ) | public void setDouble2( final double value ) | ||||
| { | { | ||||
| getLogger().info( "setDouble2( " + value + " );" ); | |||||
| getLogger().warn( "setDouble2( " + value + " );" ); | |||||
| } | } | ||||
| public void setString( final String value ) | public void setString( final String value ) | ||||
| { | { | ||||
| getLogger().info( "setString( " + value + " );" ); | |||||
| getLogger().warn( "setString( " + value + " );" ); | |||||
| } | } | ||||
| public void run() | public void run() | ||||
| @@ -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 <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||||
| */ | |||||
| 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" ); | |||||
| } | |||||
| } | |||||
| @@ -4,4 +4,6 @@ prim-test=org.apache.ant.tasks.core.PrimitiveTypesTest | |||||
| sub-elements-test=org.apache.ant.tasks.core.SubElementTest | sub-elements-test=org.apache.ant.tasks.core.SubElementTest | ||||
| conf-test=org.apache.ant.tasks.core.ConfigurationTest | conf-test=org.apache.ant.tasks.core.ConfigurationTest | ||||
| content-test=org.apache.ant.tasks.core.ContentTest | content-test=org.apache.ant.tasks.core.ContentTest | ||||
| property=org.apache.ant.tasks.core.Property | |||||
| property=org.apache.ant.tasks.core.Property | |||||
| register-tasklet=org.apache.ant.tasks.core.RegisterTasklet | |||||
| ant-call=org.apache.ant.tasks.core.AntCall | |||||
| @@ -58,7 +58,17 @@ Legal: | |||||
| <property name="blah" value="fred" /> | <property name="blah" value="fred" /> | ||||
| <property name="${blah}" value="barney" /> | <property name="${blah}" value="barney" /> | ||||
| <register-tasklet task-lib="../../dist/lib/core.tsk" | |||||
| task-name="echo2" | |||||
| classname="org.apache.ant.tasks.core.Echo" /> | |||||
| <echo message="Doing the funky Echo with ${blah} ${fred} Year=${year}!"/> | <echo message="Doing the funky Echo with ${blah} ${fred} Year=${year}!"/> | ||||
| <echo2 message="Luke to Echo base. Can you hear me?"/> | |||||
| <ant-call target="property-test2"> | |||||
| <param name="blah" value="blah-value" /> | |||||
| </ant-call> | |||||
| </target> | </target> | ||||
| <target name="property-test2"> | <target name="property-test2"> | ||||
| @@ -0,0 +1,3 @@ | |||||
| Manifest-Version: 1.0 | |||||
| Main-Class: org.apache.ant.launcher.AntLoader | |||||
| Created-By: Apache Ant Project | |||||
| @@ -0,0 +1,4 @@ | |||||
| Manifest-Version: 1.0 | |||||
| Main-Class: org.apache.ant.Main | |||||
| Class-Path: avalonapi.jar | |||||
| Created-By: Apache Ant Project | |||||
| @@ -6,7 +6,6 @@ fi | |||||
| # Cygwin support. | # Cygwin support. | ||||
| if [ "$OSTYPE" == "cygwin32" ] || [ "$OSTYPE" = "cygwin" ]; then | if [ "$OSTYPE" == "cygwin32" ] || [ "$OSTYPE" = "cygwin" ]; then | ||||
| if [ ! "$JAVA_HOME" = "" ]; then | if [ ! "$JAVA_HOME" = "" ]; then | ||||
| JAVA_HOME=`cygpath --path --unix $JAVA_HOME` | JAVA_HOME=`cygpath --path --unix $JAVA_HOME` | ||||
| fi | fi | ||||
| @@ -28,31 +27,19 @@ done | |||||
| ANT_HOME=`dirname "$PRG"`/.. | 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 "Warning: JAVA_HOME environment variable is not set." | ||||
| echo " If build fails because sun.* classes could not be found" | echo " If build fails because sun.* classes could not be found" | ||||
| echo " you will need to set the JAVA_HOME environment variable" | echo " you will need to set the JAVA_HOME environment variable" | ||||
| echo " to the installation directory of java." | echo " to the installation directory of java." | ||||
| if [ "$JAVACMD" = "" ] ; then | |||||
| JAVACMD=java | |||||
| fi | |||||
| else | |||||
| if [ "$JAVACMD" = "" ] ; then | |||||
| JAVACMD=$JAVA_HOME/bin/java | |||||
| fi | |||||
| 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} $@ | |||||
| $JAVACMD $ANT_OPTS -jar ant.jar --ant-home=${ANT_HOME} $@ | |||||
| @@ -1,8 +1,8 @@ | |||||
| @echo off | @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. | ||||
| echo Warning: JAVA_HOME environment variable is not set. | echo Warning: JAVA_HOME environment variable is not set. | ||||
| @@ -12,11 +12,17 @@ echo to the installation directory of java. | |||||
| echo. | echo. | ||||
| goto end | 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= | set ANT_CMD_LINE_ARGS= | ||||
| rem Slurp all args... | rem Slurp all args... | ||||
| @@ -29,7 +35,9 @@ goto setupArgs | |||||
| :doneArgs | :doneArgs | ||||
| rem Mmmmmm tasty - finished slurping args | 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 | :end | ||||
| set LOCALCLASSPATH= | |||||
| if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat" | |||||
| set THIS_FILE= | |||||
| set ANT_CMD_LINE_ARGS= | |||||