You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2004/06/09 13:03:33 UTC
svn commit: rev 20935 - in avalon/trunk/tools/project: . src/main/org/apache/avalon/tools/home src/main/org/apache/avalon/tools/project src/main/org/apache/avalon/tools/project/builder src/main/org/apache/avalon/tools/tasks src/test/projects/sample
Author: mcconnell
Date: Wed Jun 9 04:03:32 2004
New Revision: 20935
Modified:
avalon/trunk/tools/project/build.xml
avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java
avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Info.java
avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/builder/XMLDefinitionBuilder.java
avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java
avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PrepareTask.java
avalon/trunk/tools/project/src/test/projects/sample/build.xml
Log:
Add support for the automatic loading of plugins based on <pluginref> dependency declarations in the project model.
Modified: avalon/trunk/tools/project/build.xml
==============================================================================
--- avalon/trunk/tools/project/build.xml (original)
+++ avalon/trunk/tools/project/build.xml Wed Jun 9 04:03:32 2004
@@ -60,8 +60,8 @@
</target>
<target name="test" depends="test-prepare">
- <!--<ant dir="${target.test.dir}" />-->
- <ant dir="${target.test.dir}/projects/gizmo" />
+ <ant dir="${target.test.dir}" />
+ <!--<ant dir="${target.test.dir}/projects/gizmo" />-->
</target>
<target name="clean">
Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java (original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java Wed Jun 9 04:03:32 2004
@@ -71,6 +71,11 @@
public static Context getContext( Project project )
{
+ if( null == project )
+ {
+ throw new NullPointerException( "project" );
+ }
+
Context context = (Context) project.getReference( KEY );
if( null == context )
{
Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Info.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Info.java (original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Info.java Wed Jun 9 04:03:32 2004
@@ -130,6 +130,19 @@
return buffer.toString();
}
+ public String getSpec()
+ {
+ StringBuffer buffer = new StringBuffer( getGroup() );
+ buffer.append( "/" );
+ buffer.append( getName() );
+ if( null != getVersion() )
+ {
+ buffer.append( "#" );
+ buffer.append( getVersion() );
+ }
+ return buffer.toString();
+ }
+
public String toString()
{
return getURI();
Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/builder/XMLDefinitionBuilder.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/builder/XMLDefinitionBuilder.java (original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/builder/XMLDefinitionBuilder.java Wed Jun 9 04:03:32 2004
@@ -213,7 +213,7 @@
Element child = children[i];
String key = child.getAttribute( "key" );
String tag = child.getAttribute( "tag" );
- Policy policy = createPolicy( child );
+ Policy policy = createPolicy( child, false, false, false );
refs[i] = new PluginRef( key, policy, tag );
}
return refs;
@@ -221,12 +221,18 @@
private static Policy createPolicy( Element element )
{
+ return createPolicy( element, true, true, true );
+ }
+
+ private static Policy createPolicy(
+ Element element, boolean defBuild, boolean defTest, boolean defRuntime )
+ {
boolean build =
- ElementHelper.getBooleanAttribute( element, "build", true );
+ ElementHelper.getBooleanAttribute( element, "build", defBuild );
boolean test =
- ElementHelper.getBooleanAttribute( element, "test", true );
+ ElementHelper.getBooleanAttribute( element, "test", defTest );
boolean runtime =
- ElementHelper.getBooleanAttribute( element, "runtime", true );
+ ElementHelper.getBooleanAttribute( element, "runtime", defRuntime );
return new Policy( build, test, runtime );
}
}
Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java (original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java Wed Jun 9 04:03:32 2004
@@ -21,6 +21,7 @@
import java.io.IOException;
import java.net.URL;
+import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
@@ -51,7 +52,6 @@
public class PluginTask extends SystemTask
{
private String m_id;
- private String m_uri;
public void setArtifact( String id )
{
@@ -93,8 +93,10 @@
AntLibData data = new AntLibData( getProject(), file );
- ClassLoader classloader = project.createClassLoader( data.getPath() );
- String uri = data.getInfo().getURI();
+ AntClassLoader classloader = project.createClassLoader( data.getPath() );
+ String spec = data.getInfo().getSpec();
+ String uri = "plugin:" + spec.substring( 0, spec.indexOf( "#" ) );
+ log( "Install \"" + uri + "\"" );
//
// install the ant task defintions
@@ -109,7 +111,7 @@
Class taskClass = classloader.loadClass( def.getClassname() );
String name = uri + ":" + def.getName();
helper.addTaskDefinition( name, taskClass );
- log( "Added task definition \"" + name + "\"", Project.MSG_DEBUG );
+ log( "Task \"" + name + "\"" );
}
}
catch( Throwable e )
Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PrepareTask.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PrepareTask.java (original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PrepareTask.java Wed Jun 9 04:03:32 2004
@@ -31,6 +31,9 @@
import org.apache.tools.ant.types.FileSet;
import org.apache.avalon.tools.home.Context;
+import org.apache.avalon.tools.project.Definition;
+import org.apache.avalon.tools.project.PluginRef;
+import org.apache.avalon.tools.project.Plugin;
/**
* Load a goal.
@@ -38,7 +41,7 @@
* @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
* @version $Revision: 1.2 $ $Date: 2004/03/17 10:30:09 $
*/
-public class PrepareTask extends ContextualTask
+public class PrepareTask extends SystemTask
{
private static final String SRC_FILTERED_INCLUDES_KEY =
"project.prepare.src.filtered.includes";
@@ -66,6 +69,32 @@
public void execute() throws BuildException
{
Project project = getProject();
+
+ //
+ // if the project declares plugin dependencies then install
+ // these now
+ //
+
+ String key = getContext().getKey();
+ Definition def = getHome().getDefinition( key );
+ PluginRef[] refs = def.getPluginRefs();
+ for( int i=0; i<refs.length; i++ )
+ {
+ PluginRef ref = refs[i];
+ Plugin plugin = getHome().getPlugin( ref );
+ String path = "plugin:" + plugin.getInfo().getSpec();
+ PluginTask task = new PluginTask();
+ task.setTaskName( "plugin" );
+ task.setProject( project );
+ task.setArtifact( path );
+ task.init();
+ task.execute();
+ }
+
+ //
+ // setup the file system
+ //
+
File target = getContext().getTargetDirectory();
if( !target.exists() )
{
Modified: avalon/trunk/tools/project/src/test/projects/sample/build.xml
==============================================================================
--- avalon/trunk/tools/project/src/test/projects/sample/build.xml (original)
+++ avalon/trunk/tools/project/src/test/projects/sample/build.xml Wed Jun 9 04:03:32 2004
@@ -2,11 +2,10 @@
<project name="sample" default="dist" basedir="."
xmlns:x="antlib:org.apache.avalon.tools"
- xmlns:d="plugin:demo/demo#1.0" >
+ xmlns:d="plugin:demo/demo" >
<property file="build.properties"/>
<import file="${project.home}/standard.xml"/>
- <x:plugin artifact="plugin:demo/demo#1.0"/>
<target name="build" depends="standard.build">
<d:hello/>
---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org