mirror of https://github.com/apache/maven.git
o Refactored the plugin extractors to accept a MavenProject only, and pull the information they need from it in order to extract the mojos they're responsible for.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163435 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8fc9a29003
commit
8e82989334
|
@ -25,7 +25,7 @@
|
|||
<resources>
|
||||
<resource><directory>src/main/resources</directory></resource>
|
||||
<resource>
|
||||
<directory>src/main/java</directory>
|
||||
<directory>src/main/scripts</directory>
|
||||
<includes><include>**/*.mmld</include></includes>
|
||||
</resource>
|
||||
</resources>
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
package org.apache.maven.tools.plugin.extractor;
|
||||
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.model.Resource;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.codehaus.plexus.util.DirectoryScanner;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* @author jdcasey
|
||||
*/
|
||||
public abstract class AbstractScriptedMojoDescriptorExtractor
|
||||
implements MojoDescriptorExtractor
|
||||
{
|
||||
|
||||
public Set execute( MavenProject project ) throws Exception
|
||||
{
|
||||
Build buildSection = project.getBuild();
|
||||
|
||||
List resources = null;
|
||||
if(buildSection != null)
|
||||
{
|
||||
resources = buildSection.getResources();
|
||||
}
|
||||
|
||||
Map scriptFilesKeyedByBasedir = gatherScriptSourcesByBasedir(resources, getScriptFileExtension());
|
||||
|
||||
Set mojoDescriptors = extractMojoDescriptors(scriptFilesKeyedByBasedir);
|
||||
|
||||
return mojoDescriptors;
|
||||
}
|
||||
|
||||
protected abstract Set extractMojoDescriptors( Map scriptFilesKeyedByBasedir ) throws Exception;
|
||||
|
||||
protected abstract String getScriptFileExtension();
|
||||
|
||||
protected Map gatherScriptSourcesByBasedir( List resources, String scriptFileExtension )
|
||||
{
|
||||
Map sourcesByBasedir = new TreeMap();
|
||||
|
||||
if(resources != null)
|
||||
{
|
||||
for ( Iterator it = resources.iterator(); it.hasNext(); )
|
||||
{
|
||||
Set sources = new HashSet();
|
||||
|
||||
Resource resource = (Resource) it.next();
|
||||
|
||||
String resourceDir = resource.getDirectory();
|
||||
File dir = new File(resourceDir);
|
||||
|
||||
if(dir.exists())
|
||||
{
|
||||
DirectoryScanner scanner = new DirectoryScanner();
|
||||
|
||||
scanner.setBasedir(dir);
|
||||
|
||||
List includes = resource.getIncludes();
|
||||
|
||||
if(includes != null && !includes.isEmpty())
|
||||
{
|
||||
scanner.setIncludes((String[])includes.toArray(new String[includes.size()]));
|
||||
}
|
||||
|
||||
List excludes = resource.getExcludes();
|
||||
|
||||
if(excludes != null && !excludes.isEmpty())
|
||||
{
|
||||
scanner.setExcludes((String[])excludes.toArray(new String[excludes.size()]));
|
||||
}
|
||||
|
||||
scanner.addDefaultExcludes();
|
||||
scanner.scan();
|
||||
|
||||
String[] relativePaths = scanner.getIncludedFiles();
|
||||
|
||||
for ( int i = 0; i < relativePaths.length; i++ )
|
||||
{
|
||||
String relativePath = relativePaths[i];
|
||||
File scriptFile = new File(dir, relativePath);
|
||||
|
||||
if(scriptFile.isFile() && relativePath.endsWith(scriptFileExtension))
|
||||
{
|
||||
sources.add(scriptFile);
|
||||
}
|
||||
}
|
||||
|
||||
sourcesByBasedir.put(resourceDir, sources);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sourcesByBasedir;
|
||||
}
|
||||
|
||||
}
|
|
@ -28,6 +28,6 @@ public interface MojoDescriptorExtractor
|
|||
|
||||
String ROLE = MojoDescriptorExtractor.class.getName();
|
||||
|
||||
Set execute( String sourceDir, MavenProject project ) throws Exception;
|
||||
Set execute( MavenProject project ) throws Exception;
|
||||
|
||||
}
|
|
@ -50,22 +50,6 @@ public class DefaultMojoScanner
|
|||
|
||||
System.out.println( "Using " + mojoDescriptorExtractors.size() + " extractors." );
|
||||
|
||||
String sourceDir = null;
|
||||
|
||||
File basedir = project.getBasedir();
|
||||
|
||||
Build buildSection = project.getBuild();
|
||||
if ( buildSection != null )
|
||||
{
|
||||
sourceDir = buildSection.getSourceDirectory();
|
||||
}
|
||||
|
||||
if ( sourceDir == null )
|
||||
{
|
||||
File src = new File( basedir, "src/main/java" );
|
||||
sourceDir = src.getPath();
|
||||
}
|
||||
|
||||
for ( Iterator it = mojoDescriptorExtractors.entrySet().iterator(); it.hasNext(); )
|
||||
{
|
||||
Map.Entry entry = (Map.Entry) it.next();
|
||||
|
@ -74,7 +58,7 @@ public class DefaultMojoScanner
|
|||
|
||||
System.out.println( "Applying extractor for language: " + language );
|
||||
|
||||
Set extractorDescriptors = extractor.execute( sourceDir, project );
|
||||
Set extractorDescriptors = extractor.execute( project );
|
||||
|
||||
System.out.println( "Extractor for language: " + language + " found " + extractorDescriptors.size()
|
||||
+ " mojo descriptors." );
|
||||
|
|
|
@ -15,7 +15,7 @@ public class TestExtractor
|
|||
implements MojoDescriptorExtractor
|
||||
{
|
||||
|
||||
public Set execute( String sourceDir, MavenProject project ) throws Exception
|
||||
public Set execute( MavenProject project ) throws Exception
|
||||
{
|
||||
MojoDescriptor desc = new MojoDescriptor();
|
||||
desc.setId( "testPluginId" );
|
||||
|
|
|
@ -47,4 +47,13 @@
|
|||
<version>2.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<unitTest>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/test/resources</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</unitTest>
|
||||
</build>
|
||||
</project>
|
|
@ -20,6 +20,8 @@ import com.thoughtworks.qdox.JavaDocBuilder;
|
|||
import com.thoughtworks.qdox.model.DocletTag;
|
||||
import com.thoughtworks.qdox.model.JavaClass;
|
||||
import com.thoughtworks.qdox.model.JavaSource;
|
||||
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
||||
import org.apache.maven.plugin.descriptor.Parameter;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
|
@ -241,10 +243,30 @@ public class JavaMojoDescriptorExtractor
|
|||
return javaSource.getClasses()[0];
|
||||
}
|
||||
|
||||
public Set execute( String sourceDir, MavenProject project ) throws Exception
|
||||
public Set execute( MavenProject project ) throws Exception
|
||||
{
|
||||
JavaDocBuilder builder = new JavaDocBuilder();
|
||||
|
||||
File basedir = project.getBasedir();
|
||||
|
||||
System.out.println("Project basedir: " + basedir);
|
||||
|
||||
String sourceDir = null;
|
||||
|
||||
Build buildSection = project.getBuild();
|
||||
if ( buildSection != null )
|
||||
{
|
||||
sourceDir = buildSection.getSourceDirectory();
|
||||
}
|
||||
|
||||
if ( sourceDir == null )
|
||||
{
|
||||
File src = new File( basedir, "src/main/java" );
|
||||
sourceDir = src.getPath();
|
||||
}
|
||||
|
||||
System.out.println("Source directory for java mojo extraction: " + sourceDir);
|
||||
|
||||
File sourceDirectoryFile = new File( sourceDir );
|
||||
|
||||
builder.addSourceTree( sourceDirectoryFile );
|
||||
|
|
|
@ -16,6 +16,7 @@ package org.apache.maven.tools.plugin.extractor.java;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
|
||||
|
@ -40,13 +41,20 @@ public class JavaMojoDescriptorExtractorTest
|
|||
System.out.println( "found source file: " + sourceFile );
|
||||
|
||||
File dir = sourceFile.getParentFile();
|
||||
|
||||
|
||||
Model model = new Model();
|
||||
model.setArtifactId( "maven-unitTesting-plugin" );
|
||||
|
||||
Build build = new Build();
|
||||
build.setSourceDirectory(new File(dir, "source").getPath());
|
||||
|
||||
model.setBuild(build);
|
||||
|
||||
MavenProject project = new MavenProject( model );
|
||||
|
||||
project.setFile(new File(dir, "pom.xml"));
|
||||
|
||||
Set results = extractor.execute( dir.getAbsolutePath(), project );
|
||||
Set results = extractor.execute( project );
|
||||
assertEquals( 2, results.size() );
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
package source;
|
||||
|
||||
import org.apache.maven.plugin.AbstractPlugin;
|
||||
import org.apache.maven.plugin.PluginExecutionRequest;
|
||||
import org.apache.maven.plugin.PluginExecutionResponse;
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
package source;
|
||||
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.plugin.AbstractPlugin;
|
||||
import org.apache.maven.plugin.PluginExecutionRequest;
|
||||
|
|
|
@ -17,11 +17,9 @@ package org.apache.maven.tools.plugin.extractor.marmalade;
|
|||
*/
|
||||
|
||||
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.script.marmalade.MarmaladeMojoExecutionDirectives;
|
||||
import org.apache.maven.script.marmalade.tags.MojoTag;
|
||||
import org.apache.maven.tools.plugin.extractor.MojoDescriptorExtractor;
|
||||
import org.apache.maven.tools.plugin.util.PluginUtils;
|
||||
import org.apache.maven.tools.plugin.extractor.AbstractScriptedMojoDescriptorExtractor;
|
||||
import org.codehaus.marmalade.metamodel.ScriptBuilder;
|
||||
import org.codehaus.marmalade.model.MarmaladeScript;
|
||||
import org.codehaus.marmalade.model.MarmaladeTag;
|
||||
|
@ -35,6 +33,7 @@ import java.io.BufferedReader;
|
|||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
@ -43,48 +42,56 @@ import java.util.TreeMap;
|
|||
* @author jdcasey
|
||||
*/
|
||||
public class MarmaladeMojoDescriptorExtractor
|
||||
implements MojoDescriptorExtractor
|
||||
extends AbstractScriptedMojoDescriptorExtractor
|
||||
{
|
||||
|
||||
protected String getScriptFileExtension()
|
||||
{
|
||||
return ".mmld";
|
||||
}
|
||||
|
||||
public Set execute( String sourceDir, MavenProject project ) throws Exception
|
||||
protected Set extractMojoDescriptors( Map sourceFilesKeyedByBasedir ) throws Exception
|
||||
{
|
||||
ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
|
||||
try
|
||||
{
|
||||
Thread.currentThread().setContextClassLoader(MarmaladeMojoDescriptorExtractor.class.getClassLoader());
|
||||
|
||||
String[] files = PluginUtils.findSources( sourceDir, "**/*.mmld" );
|
||||
|
||||
Set descriptors = new HashSet();
|
||||
|
||||
File dir = new File( sourceDir );
|
||||
for ( int i = 0; i < files.length; i++ )
|
||||
|
||||
for ( Iterator mapIterator = sourceFilesKeyedByBasedir.entrySet().iterator(); mapIterator.hasNext(); )
|
||||
{
|
||||
String file = files[i];
|
||||
|
||||
File scriptFile = new File( dir, file );
|
||||
Map.Entry entry = (Map.Entry) mapIterator.next();
|
||||
|
||||
MarmaladeScript script = parse(scriptFile);
|
||||
String basedir = (String)entry.getKey();
|
||||
Set scriptFiles = (Set)entry.getValue();
|
||||
|
||||
MarmaladeTag rootTag = script.getRoot();
|
||||
if(rootTag instanceof MojoTag)
|
||||
for ( Iterator it = scriptFiles.iterator(); it.hasNext(); )
|
||||
{
|
||||
Map contextMap = new TreeMap();
|
||||
contextMap.put( MarmaladeMojoExecutionDirectives.SCRIPT_BASEPATH_INVAR, sourceDir );
|
||||
File scriptFile = (File) it.next();
|
||||
|
||||
MarmaladeExecutionContext context = new DefaultContext(contextMap);
|
||||
MarmaladeScript script = parse(scriptFile);
|
||||
|
||||
script.execute(context);
|
||||
|
||||
contextMap = context.getExternalizedVariables();
|
||||
|
||||
MojoDescriptor descriptor = (MojoDescriptor) contextMap.get( MarmaladeMojoExecutionDirectives.METADATA_OUTVAR );
|
||||
|
||||
descriptors.add( descriptor );
|
||||
}
|
||||
else
|
||||
{
|
||||
System.out.println("This script is not a mojo. Its root tag is {element: " + rootTag.getTagInfo().getElement() + ", class: " + rootTag.getClass().getName() + "}");
|
||||
MarmaladeTag rootTag = script.getRoot();
|
||||
if(rootTag instanceof MojoTag)
|
||||
{
|
||||
Map contextMap = new TreeMap();
|
||||
contextMap.put( MarmaladeMojoExecutionDirectives.SCRIPT_BASEPATH_INVAR, basedir );
|
||||
|
||||
MarmaladeExecutionContext context = new DefaultContext(contextMap);
|
||||
|
||||
script.execute(context);
|
||||
|
||||
contextMap = context.getExternalizedVariables();
|
||||
|
||||
MojoDescriptor descriptor = (MojoDescriptor) contextMap.get( MarmaladeMojoExecutionDirectives.METADATA_OUTVAR );
|
||||
|
||||
descriptors.add( descriptor );
|
||||
}
|
||||
else
|
||||
{
|
||||
System.out.println("This script is not a mojo. Its root tag is {element: " + rootTag.getTagInfo().getElement() + ", class: " + rootTag.getClass().getName() + "}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,9 @@ package org.apache.maven.tools.plugin.extractor.marmalade;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Resource;
|
||||
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.tools.plugin.extractor.MojoDescriptorExtractor;
|
||||
|
@ -39,12 +41,23 @@ public class MarmaladeMojoDescriptorExtractorTest
|
|||
|
||||
Model model = new Model();
|
||||
model.setArtifactId( "testArtifactId" );
|
||||
|
||||
Build build = new Build();
|
||||
|
||||
Resource resource = new Resource();
|
||||
resource.setDirectory(basedir.getPath());
|
||||
|
||||
build.addResource(resource);
|
||||
|
||||
model.setBuild(build);
|
||||
|
||||
MavenProject project = new MavenProject( model );
|
||||
|
||||
project.setFile(new File(basedir, "pom.xml"));
|
||||
|
||||
MarmaladeMojoDescriptorExtractor extractor = (MarmaladeMojoDescriptorExtractor) lookup(MojoDescriptorExtractor.ROLE, "marmalade");
|
||||
|
||||
Set descriptors = extractor.execute( basedir.getPath(), project );
|
||||
Set descriptors = extractor.execute( project );
|
||||
|
||||
assertEquals( 1, descriptors.size() );
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
package org.apache.maven.plugin.script;
|
||||
|
||||
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
||||
|
||||
/**
|
||||
* @author jdcasey
|
||||
*/
|
||||
public interface MojoScript
|
||||
{
|
||||
|
||||
MojoDescriptor getMojoDescriptor();
|
||||
|
||||
}
|
Loading…
Reference in New Issue