[MPLUGIN-200] move maven-script to maven-plugin-tools.
git-svn-id: https://svn.apache.org/repos/asf/maven/plugin-tools/trunk@1340859 13f79535-47bb-0310-9956-ffa450edef68master
parent
eeb238a4f3
commit
da58bced25
|
|
@ -0,0 +1,79 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-script</artifactId>
|
||||
<version>2.2.2-RC1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>maven-script-ant</artifactId>
|
||||
|
||||
<name>Maven Ant Mojo Support</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.ant</groupId>
|
||||
<artifactId>ant</artifactId>
|
||||
<version>1.7.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ant</groupId>
|
||||
<artifactId>ant-launcher</artifactId>
|
||||
<version>1.7.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-plugin-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-ant-factory</artifactId>
|
||||
<version>1.0-alpha-2.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-container-default</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-project</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-plugin-descriptor</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-archiver</artifactId>
|
||||
<version>1.0-alpha-11</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>easymock</groupId>
|
||||
<artifactId>easymock</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
package org.apache.maven.script.ant;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import org.codehaus.classworlds.ClassRealm;
|
||||
import org.codehaus.plexus.PlexusContainer;
|
||||
import org.codehaus.plexus.component.factory.ComponentInstantiationException;
|
||||
import org.codehaus.plexus.component.factory.ant.AntComponentFactory;
|
||||
import org.codehaus.plexus.component.factory.ant.AntScriptInvoker;
|
||||
import org.codehaus.plexus.component.repository.ComponentDescriptor;
|
||||
|
||||
public class AntMojoComponentFactory
|
||||
extends AntComponentFactory
|
||||
{
|
||||
|
||||
public Object newInstance( ComponentDescriptor descriptor, ClassRealm realm, PlexusContainer container )
|
||||
throws ComponentInstantiationException
|
||||
{
|
||||
return new AntMojoWrapper( (AntScriptInvoker) super.newInstance( descriptor, realm, container ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,378 @@
|
|||
package org.apache.maven.script.ant;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.artifact.DependencyResolutionRequiredException;
|
||||
import org.apache.maven.execution.MavenSession;
|
||||
import org.apache.maven.plugin.AbstractMojo;
|
||||
import org.apache.maven.plugin.ContextEnabled;
|
||||
import org.apache.maven.plugin.MojoExecution;
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
import org.apache.maven.plugin.PluginParameterExpressionEvaluator;
|
||||
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.path.PathTranslator;
|
||||
import org.apache.tools.ant.Project;
|
||||
import org.apache.tools.ant.PropertyHelper;
|
||||
import org.apache.tools.ant.types.Path;
|
||||
import org.codehaus.plexus.archiver.ArchiverException;
|
||||
import org.codehaus.plexus.archiver.UnArchiver;
|
||||
import org.codehaus.plexus.archiver.zip.ZipUnArchiver;
|
||||
import org.codehaus.plexus.component.MapOrientedComponent;
|
||||
import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
|
||||
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
|
||||
import org.codehaus.plexus.component.factory.ant.AntComponentExecutionException;
|
||||
import org.codehaus.plexus.component.factory.ant.AntScriptInvoker;
|
||||
import org.codehaus.plexus.component.repository.ComponentRequirement;
|
||||
import org.codehaus.plexus.logging.LogEnabled;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
import org.codehaus.plexus.util.StringUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class AntMojoWrapper
|
||||
extends AbstractMojo
|
||||
implements ContextEnabled, MapOrientedComponent, LogEnabled
|
||||
{
|
||||
|
||||
private Map pluginContext;
|
||||
|
||||
private final AntScriptInvoker scriptInvoker;
|
||||
|
||||
private Project antProject;
|
||||
|
||||
private MavenProject mavenProject;
|
||||
|
||||
private MojoExecution mojoExecution;
|
||||
|
||||
private MavenSession session;
|
||||
|
||||
private PathTranslator pathTranslator;
|
||||
|
||||
private Logger logger;
|
||||
|
||||
private transient List unconstructedParts = new ArrayList();
|
||||
|
||||
public AntMojoWrapper( AntScriptInvoker scriptInvoker )
|
||||
{
|
||||
this.scriptInvoker = scriptInvoker;
|
||||
}
|
||||
|
||||
public void execute()
|
||||
throws MojoExecutionException
|
||||
{
|
||||
if ( antProject == null )
|
||||
{
|
||||
antProject = scriptInvoker.getProject();
|
||||
}
|
||||
|
||||
Map allConfig = new HashMap();
|
||||
if ( pluginContext != null && !pluginContext.isEmpty() )
|
||||
{
|
||||
allConfig.putAll( pluginContext );
|
||||
}
|
||||
|
||||
Map refs = scriptInvoker.getReferences();
|
||||
if ( refs != null )
|
||||
{
|
||||
allConfig.putAll( refs );
|
||||
|
||||
for ( Iterator it = refs.entrySet().iterator(); it.hasNext(); )
|
||||
{
|
||||
Map.Entry entry = (Map.Entry) it.next();
|
||||
String key = (String) entry.getKey();
|
||||
if ( key.startsWith( PathTranslator.class.getName() ) )
|
||||
{
|
||||
pathTranslator = (PathTranslator) entry.getValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mavenProject = (MavenProject) allConfig.get( "project" );
|
||||
|
||||
mojoExecution = (MojoExecution) allConfig.get( "mojoExecution" );
|
||||
|
||||
session = (MavenSession) allConfig.get( "session" );
|
||||
|
||||
unpackFileBasedResources();
|
||||
|
||||
addClasspathReferences();
|
||||
|
||||
if ( logger.isDebugEnabled() && !unconstructedParts.isEmpty() )
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
|
||||
buffer.append( "The following standard Maven Ant-mojo support objects could not be created:\n\n" );
|
||||
|
||||
for ( Iterator it = unconstructedParts.iterator(); it.hasNext(); )
|
||||
{
|
||||
String part = (String) it.next();
|
||||
buffer.append( "\n- " ).append( part );
|
||||
}
|
||||
|
||||
buffer.append( "\n\nMaven project, session, mojo-execution, or path-translation parameter information is " );
|
||||
buffer.append( "\nmissing from this mojo's plugin descriptor." );
|
||||
buffer.append( "\n\nPerhaps this Ant-based mojo depends on maven-script-ant < 2.1.0, " );
|
||||
buffer.append( "or used maven-plugin-tools-ant < 2.2 during release?\n\n" );
|
||||
|
||||
logger.debug( buffer.toString() );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
scriptInvoker.invoke();
|
||||
}
|
||||
catch ( AntComponentExecutionException e )
|
||||
{
|
||||
throw new MojoExecutionException( "Failed to execute: " + e.getMessage(), e );
|
||||
}
|
||||
|
||||
unconstructedParts.clear();
|
||||
}
|
||||
|
||||
public void setPluginContext( Map pluginContext )
|
||||
{
|
||||
this.pluginContext = pluginContext;
|
||||
}
|
||||
|
||||
public Map getPluginContext()
|
||||
{
|
||||
return pluginContext;
|
||||
}
|
||||
|
||||
public void addComponentRequirement( ComponentRequirement requirementDescriptor, Object requirementValue )
|
||||
throws ComponentConfigurationException
|
||||
{
|
||||
scriptInvoker.addComponentRequirement( requirementDescriptor, requirementValue );
|
||||
}
|
||||
|
||||
public void setComponentConfiguration( Map componentConfiguration )
|
||||
throws ComponentConfigurationException
|
||||
{
|
||||
scriptInvoker.setComponentConfiguration( componentConfiguration );
|
||||
antProject = scriptInvoker.getProject();
|
||||
}
|
||||
|
||||
private void unpackFileBasedResources()
|
||||
throws MojoExecutionException
|
||||
{
|
||||
if ( mojoExecution == null || mavenProject == null )
|
||||
{
|
||||
unconstructedParts.add( "Unpacked Ant build scripts (in Maven build directory)." );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// What we need to write out any resources in the plugin to the target directory of the
|
||||
// mavenProject using the Ant-based plugin:
|
||||
//
|
||||
// 1. Need a reference to the plugin JAR itself
|
||||
// 2. Need a reference to the ${basedir} of the mavenProject
|
||||
|
||||
PluginDescriptor pluginDescriptor = mojoExecution.getMojoDescriptor().getPluginDescriptor();
|
||||
|
||||
File pluginJar = pluginDescriptor.getPluginArtifact().getFile();
|
||||
|
||||
String resourcesPath = pluginDescriptor.getArtifactId();
|
||||
|
||||
File outputDirectory = new File( mavenProject.getBuild().getDirectory() );
|
||||
|
||||
try
|
||||
{
|
||||
UnArchiver ua = new ZipUnArchiver( pluginJar );
|
||||
|
||||
ua.extract( resourcesPath, outputDirectory );
|
||||
}
|
||||
catch ( ArchiverException e )
|
||||
{
|
||||
throw new MojoExecutionException( "Error extracting resources from your Ant-based plugin.", e );
|
||||
}
|
||||
}
|
||||
|
||||
private void addClasspathReferences()
|
||||
throws MojoExecutionException
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( mavenProject != null && session != null && pathTranslator != null )
|
||||
{
|
||||
ExpressionEvaluator exprEvaluator =
|
||||
new PluginParameterExpressionEvaluator( session, mojoExecution, pathTranslator, logger, mavenProject,
|
||||
mavenProject.getProperties() );
|
||||
|
||||
PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper( antProject );
|
||||
propertyHelper.setNext( new AntPropertyHelper( exprEvaluator, mavenProject.getArtifacts(), getLog() ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
unconstructedParts.add( "Maven parameter expression evaluator for Ant properties." );
|
||||
}
|
||||
|
||||
if ( mavenProject != null )
|
||||
{
|
||||
// Compile classpath
|
||||
Path p = new Path( antProject );
|
||||
|
||||
p.setPath( StringUtils.join( mavenProject.getCompileClasspathElements().iterator(), File.pathSeparator ) );
|
||||
|
||||
/* maven.dependency.classpath it's deprecated as it's equal to maven.compile.classpath */
|
||||
scriptInvoker.getReferences().put( "maven.dependency.classpath", p );
|
||||
antProject.addReference( "maven.dependency.classpath", p );
|
||||
|
||||
scriptInvoker.getReferences().put( "maven.compile.classpath", p );
|
||||
antProject.addReference( "maven.compile.classpath", p );
|
||||
|
||||
// Runtime classpath
|
||||
p = new Path( antProject );
|
||||
|
||||
p.setPath( StringUtils.join( mavenProject.getRuntimeClasspathElements().iterator(), File.pathSeparator ) );
|
||||
|
||||
scriptInvoker.getReferences().put( "maven.runtime.classpath", p );
|
||||
antProject.addReference( "maven.runtime.classpath", p );
|
||||
|
||||
// Test classpath
|
||||
p = new Path( antProject );
|
||||
|
||||
p.setPath( StringUtils.join( mavenProject.getTestClasspathElements().iterator(), File.pathSeparator ) );
|
||||
|
||||
scriptInvoker.getReferences().put( "maven.test.classpath", p );
|
||||
antProject.addReference( "maven.test.classpath", p );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
unconstructedParts.add( "Maven standard project-based classpath references." );
|
||||
}
|
||||
|
||||
if ( mojoExecution != null )
|
||||
{
|
||||
// Plugin dependency classpath
|
||||
|
||||
Path p = getPathFromArtifacts( mojoExecution.getMojoDescriptor().getPluginDescriptor().getArtifacts(), antProject );
|
||||
|
||||
scriptInvoker.getReferences().put( "maven.plugin.classpath", p );
|
||||
antProject.addReference( "maven.plugin.classpath", p );
|
||||
}
|
||||
else
|
||||
{
|
||||
unconstructedParts.add( "Maven standard plugin-based classpath references." );
|
||||
}
|
||||
}
|
||||
catch ( DependencyResolutionRequiredException e )
|
||||
{
|
||||
throw new MojoExecutionException( "Error creating classpath references for Ant-based plugin scripts.", e );
|
||||
}
|
||||
}
|
||||
|
||||
public Path getPathFromArtifacts( Collection artifacts,
|
||||
Project antProject )
|
||||
throws DependencyResolutionRequiredException
|
||||
{
|
||||
List list = new ArrayList( artifacts.size() );
|
||||
|
||||
for ( Iterator i = artifacts.iterator(); i.hasNext(); )
|
||||
{
|
||||
Artifact a = (Artifact) i.next();
|
||||
|
||||
File file = a.getFile();
|
||||
|
||||
if ( file == null )
|
||||
{
|
||||
throw new DependencyResolutionRequiredException( a );
|
||||
}
|
||||
|
||||
list.add( file.getPath() );
|
||||
}
|
||||
|
||||
Path p = new Path( antProject );
|
||||
|
||||
p.setPath( StringUtils.join( list.iterator(), File.pathSeparator ) );
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
public Project getAntProject()
|
||||
{
|
||||
return antProject;
|
||||
}
|
||||
|
||||
public void setAntProject( Project antProject )
|
||||
{
|
||||
this.antProject = antProject;
|
||||
}
|
||||
|
||||
public MavenProject getMavenProject()
|
||||
{
|
||||
return mavenProject;
|
||||
}
|
||||
|
||||
public void setMavenProject( MavenProject mavenProject )
|
||||
{
|
||||
this.mavenProject = mavenProject;
|
||||
}
|
||||
|
||||
public MojoExecution getMojoExecution()
|
||||
{
|
||||
return mojoExecution;
|
||||
}
|
||||
|
||||
public void setMojoExecution( MojoExecution mojoExecution )
|
||||
{
|
||||
this.mojoExecution = mojoExecution;
|
||||
}
|
||||
|
||||
public MavenSession getSession()
|
||||
{
|
||||
return session;
|
||||
}
|
||||
|
||||
public void setSession( MavenSession session )
|
||||
{
|
||||
this.session = session;
|
||||
}
|
||||
|
||||
public PathTranslator getPathTranslator()
|
||||
{
|
||||
return pathTranslator;
|
||||
}
|
||||
|
||||
public void setPathTranslator( PathTranslator pathTranslator )
|
||||
{
|
||||
this.pathTranslator = pathTranslator;
|
||||
}
|
||||
|
||||
public AntScriptInvoker getScriptInvoker()
|
||||
{
|
||||
return scriptInvoker;
|
||||
}
|
||||
|
||||
public void enableLogging( Logger logger )
|
||||
{
|
||||
this.logger = logger;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,207 @@
|
|||
package org.apache.maven.script.ant;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.plugin.logging.Log;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.tools.ant.PropertyHelper;
|
||||
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
|
||||
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
|
||||
import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
|
||||
|
||||
/**
|
||||
* Makes the ${expressions} used in Maven available to Ant as properties.
|
||||
*
|
||||
* @author <a href="mailto:kenney@apache.org">Kenney Westerhof</a>
|
||||
*/
|
||||
public class AntPropertyHelper
|
||||
extends PropertyHelper
|
||||
{
|
||||
private static final String DEPENDENCY_PREFIX = "maven.dependency.";
|
||||
private Log log;
|
||||
private ExpressionEvaluator exprEvaluator;
|
||||
private MavenProject mavenProject;
|
||||
private Map artifactMap = new Hashtable();
|
||||
|
||||
/**
|
||||
* @deprecated use the other constructor
|
||||
* @param project
|
||||
* @param l
|
||||
*/
|
||||
public AntPropertyHelper( MavenProject project, Log l )
|
||||
{
|
||||
mavenProject = project;
|
||||
log = l;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #AntPropertyHelper(ExpressionEvaluator, Set, Log)} to resolve maven.dependency.* properties
|
||||
* @param exprEvaluator
|
||||
* @param l
|
||||
*/
|
||||
public AntPropertyHelper( ExpressionEvaluator exprEvaluator, Log l )
|
||||
{
|
||||
this( exprEvaluator, Collections.EMPTY_SET, l );
|
||||
}
|
||||
|
||||
/**
|
||||
* @param exprEvaluator
|
||||
* @param artifacts
|
||||
* @param l
|
||||
*/
|
||||
public AntPropertyHelper( ExpressionEvaluator exprEvaluator, Set artifacts, Log l )
|
||||
{
|
||||
this.mavenProject = null;
|
||||
this.exprEvaluator = exprEvaluator;
|
||||
this.log = l;
|
||||
|
||||
for ( Iterator it = artifacts.iterator(); it.hasNext(); )
|
||||
{
|
||||
Artifact artifact = (Artifact) it.next();
|
||||
|
||||
String key = DEPENDENCY_PREFIX + artifact.getGroupId() + "." + artifact.getArtifactId()
|
||||
+ ( artifact.getClassifier() != null ? "." + artifact.getClassifier() : "" )
|
||||
+ ( artifact.getType() != null ? "." + artifact.getType() : "" ) + ".path";
|
||||
|
||||
log.debug( "Storing: " + key + "=" + artifact.getFile().getPath() );
|
||||
|
||||
artifactMap.put( key, artifact.getFile().getPath() );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.apache.tools.ant.PropertyHelper#getPropertyHook(java.lang.String, java.lang.String, boolean)
|
||||
*/
|
||||
public synchronized Object getPropertyHook( String ns, String name, boolean user )
|
||||
{
|
||||
if ( log.isDebugEnabled() )
|
||||
{
|
||||
log.debug( "getProperty(ns=" + ns + ", name=" + name + ", user=" + user + ")" );
|
||||
}
|
||||
|
||||
/* keep old behaviour */
|
||||
if ( mavenProject != null )
|
||||
{
|
||||
return getPropertyHook( ns, name, user, mavenProject );
|
||||
}
|
||||
|
||||
|
||||
Object val = null;
|
||||
|
||||
if ( name.startsWith( DEPENDENCY_PREFIX ) )
|
||||
{
|
||||
val = (String) artifactMap.get( name );
|
||||
}
|
||||
|
||||
if ( val == null )
|
||||
{
|
||||
try
|
||||
{
|
||||
val = exprEvaluator.evaluate( "${" + name + "}" );
|
||||
}
|
||||
catch ( ExpressionEvaluationException e )
|
||||
{
|
||||
if ( log.isErrorEnabled() )
|
||||
{
|
||||
log.error( "Failed to evaluate expression", e );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( val == null )
|
||||
{
|
||||
val = super.getPropertyHook( ns, name, user );
|
||||
|
||||
if ( val == null )
|
||||
{
|
||||
val = System.getProperty( name.toString() );
|
||||
}
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated added to keep backwards compatibility
|
||||
* @param ns
|
||||
* @param name
|
||||
* @param user
|
||||
* @param mavenProject
|
||||
* @return The property value.
|
||||
*/
|
||||
private Object getPropertyHook( String ns, String name, boolean user, MavenProject mavenProject )
|
||||
{
|
||||
Object val = null;
|
||||
try
|
||||
{
|
||||
if ( name.startsWith( DEPENDENCY_PREFIX ) )
|
||||
{
|
||||
val = (String) artifactMap.get( name );
|
||||
}
|
||||
else if ( name.startsWith( "project." ) )
|
||||
{
|
||||
val = ReflectionValueExtractor.evaluate(
|
||||
name,
|
||||
mavenProject,
|
||||
true
|
||||
);
|
||||
}
|
||||
else if ( name.equals( "basedir" ) )
|
||||
{
|
||||
val = ReflectionValueExtractor.evaluate(
|
||||
"basedir.path",
|
||||
mavenProject,
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
catch ( Exception e )
|
||||
{
|
||||
if ( log.isWarnEnabled() )
|
||||
{
|
||||
log.warn( "Error evaluating expression '" + name + "'", e );
|
||||
}
|
||||
}
|
||||
|
||||
if ( val == null )
|
||||
{
|
||||
val = super.getPropertyHook( ns, name, user );
|
||||
if ( val == null )
|
||||
{
|
||||
val = System.getProperty( name.toString() );
|
||||
}
|
||||
}
|
||||
|
||||
if ( val instanceof File )
|
||||
{
|
||||
val = ( (File) val ).getAbsoluteFile();
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
|
||||
<component-set>
|
||||
<components>
|
||||
<component>
|
||||
<role>org.codehaus.plexus.component.factory.ComponentFactory</role>
|
||||
<implementation>org.apache.maven.script.ant.AntMojoComponentFactory</implementation>
|
||||
<role-hint>ant-mojo</role-hint>
|
||||
</component>
|
||||
</components>
|
||||
</component-set>
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
|
||||
<body>
|
||||
<menu name="Overview">
|
||||
<item name="Introduction" href="index.html"/>
|
||||
<item name="JavaDocs" href="apidocs/index.html"/>
|
||||
<item name="Source Xref" href="xref/index.html"/>
|
||||
<!--item name="FAQ" href="faq.html"/-->
|
||||
</menu>
|
||||
|
||||
<menu ref="parent"/>
|
||||
<menu ref="reports"/>
|
||||
</body>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,287 @@
|
|||
package org.apache.maven.script.ant;
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.execution.MavenSession;
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.plugin.MojoExecution;
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
||||
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||
import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.path.PathTranslator;
|
||||
import org.apache.tools.ant.BuildEvent;
|
||||
import org.apache.tools.ant.BuildListener;
|
||||
import org.codehaus.plexus.archiver.ArchiverException;
|
||||
import org.codehaus.plexus.archiver.jar.JarArchiver;
|
||||
import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
|
||||
import org.codehaus.plexus.component.factory.ComponentInstantiationException;
|
||||
import org.codehaus.plexus.component.factory.ant.AntScriptInvoker;
|
||||
import org.codehaus.plexus.component.repository.ComponentRequirement;
|
||||
import org.codehaus.plexus.configuration.PlexusConfigurationException;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
import org.codehaus.plexus.logging.console.ConsoleLogger;
|
||||
import org.codehaus.plexus.util.IOUtil;
|
||||
import org.codehaus.plexus.util.StringUtils;
|
||||
import org.easymock.MockControl;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintStream;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class AntMojoWrapperTest
|
||||
extends TestCase
|
||||
{
|
||||
|
||||
public void test2xStylePlugin()
|
||||
throws PlexusConfigurationException, IOException, ComponentInstantiationException, MojoExecutionException,
|
||||
ComponentConfigurationException, ArchiverException
|
||||
{
|
||||
String pluginXml = "META-INF/maven/plugin-2.1.xml";
|
||||
|
||||
List messages = run( pluginXml, true );
|
||||
|
||||
assertPresence( messages, "Unpacked Ant build scripts (in Maven build directory).", false );
|
||||
assertPresence( messages, "Maven parameter expression evaluator for Ant properties.", false );
|
||||
assertPresence( messages, "Maven standard project-based classpath references.", false );
|
||||
assertPresence( messages, "Maven standard plugin-based classpath references.", false );
|
||||
assertPresence( messages,
|
||||
"Maven project, session, mojo-execution, or path-translation parameter information is", false );
|
||||
assertPresence( messages, "maven-script-ant < 2.1.0, or used maven-plugin-tools-ant < 2.2 during release",
|
||||
false );
|
||||
|
||||
assertPresence( messages, "path-is-missing", false );
|
||||
}
|
||||
|
||||
public void test20StylePlugin()
|
||||
throws PlexusConfigurationException, IOException, ComponentInstantiationException, MojoExecutionException,
|
||||
ComponentConfigurationException, ArchiverException
|
||||
{
|
||||
String pluginXml = "META-INF/maven/plugin-2.0.xml";
|
||||
|
||||
List messages = run( pluginXml, false );
|
||||
|
||||
assertPresence( messages, "Unpacked Ant build scripts (in Maven build directory).", true );
|
||||
assertPresence( messages, "Maven parameter expression evaluator for Ant properties.", true );
|
||||
assertPresence( messages, "Maven standard project-based classpath references.", true );
|
||||
assertPresence( messages, "Maven standard plugin-based classpath references.", true );
|
||||
assertPresence( messages,
|
||||
"Maven project, session, mojo-execution, or path-translation parameter information is", true );
|
||||
assertPresence( messages, "maven-script-ant < 2.1.0, or used maven-plugin-tools-ant < 2.2 during release", true );
|
||||
|
||||
assertPresence( messages, "path-is-missing", true );
|
||||
}
|
||||
|
||||
private void assertPresence( List messages, String test, boolean shouldBePresent )
|
||||
{
|
||||
boolean found = false;
|
||||
|
||||
for ( Iterator it = messages.iterator(); it.hasNext(); )
|
||||
{
|
||||
String message = (String) it.next();
|
||||
if ( message.indexOf( test ) > -1 )
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !shouldBePresent && found )
|
||||
{
|
||||
fail( "Test string: '" + test + "' was found in output, but SHOULD NOT BE THERE." );
|
||||
}
|
||||
else if ( shouldBePresent && !found )
|
||||
{
|
||||
fail( "Test string: '" + test + "' was NOT found in output, but SHOULD BE THERE." );
|
||||
}
|
||||
}
|
||||
|
||||
private List run( String pluginXml, boolean includeImplied )
|
||||
throws PlexusConfigurationException, IOException, ComponentInstantiationException, MojoExecutionException,
|
||||
ComponentConfigurationException, ArchiverException
|
||||
{
|
||||
StackTraceElement stack = new Throwable().getStackTrace()[1];
|
||||
System.out.println( "\n\nRunning: " + stack.getMethodName() + "\n\n" );
|
||||
|
||||
URL resource = Thread.currentThread().getContextClassLoader().getResource( pluginXml );
|
||||
|
||||
if ( resource == null )
|
||||
{
|
||||
fail( "plugin descriptor not found: '" + pluginXml + "'." );
|
||||
}
|
||||
|
||||
Reader reader = null;
|
||||
PluginDescriptor pd;
|
||||
try
|
||||
{
|
||||
reader = new InputStreamReader( resource.openStream() );
|
||||
pd = new PluginDescriptorBuilder().build( reader, pluginXml );
|
||||
}
|
||||
finally
|
||||
{
|
||||
IOUtil.close( reader );
|
||||
}
|
||||
|
||||
Map config = new HashMap();
|
||||
config.put( "basedir", new File( "." ).getAbsoluteFile() );
|
||||
config.put( "messageLevel", "info" );
|
||||
|
||||
MojoDescriptor md = pd.getMojo( "test" );
|
||||
|
||||
AntMojoWrapper wrapper =
|
||||
new AntMojoWrapper( new AntScriptInvoker( md, Thread.currentThread().getContextClassLoader() ) );
|
||||
|
||||
wrapper.enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
|
||||
|
||||
MockControl artifactCtl = null;
|
||||
MockControl pathTranslatorCtl = null;
|
||||
if ( includeImplied )
|
||||
{
|
||||
File pluginXmlFile = new File( StringUtils.replace( resource.getPath(), "%20", " " ) );
|
||||
|
||||
File jarFile = File.createTempFile( "AntMojoWrapperTest.", ".test.jar" );
|
||||
jarFile.deleteOnExit();
|
||||
|
||||
JarArchiver archiver = new JarArchiver();
|
||||
archiver.enableLogging( new ConsoleLogger( Logger.LEVEL_ERROR, "archiver" ) );
|
||||
archiver.setDestFile( jarFile );
|
||||
archiver.addFile( pluginXmlFile, pluginXml );
|
||||
archiver.createArchive();
|
||||
|
||||
artifactCtl = MockControl.createControl( Artifact.class );
|
||||
Artifact artifact = (Artifact) artifactCtl.getMock();
|
||||
|
||||
artifact.getFile();
|
||||
artifactCtl.setReturnValue( jarFile, MockControl.ZERO_OR_MORE );
|
||||
|
||||
artifact.getGroupId();
|
||||
artifactCtl.setReturnValue( "groupId", MockControl.ZERO_OR_MORE );
|
||||
|
||||
artifact.getArtifactId();
|
||||
artifactCtl.setReturnValue( "artifactId", MockControl.ZERO_OR_MORE );
|
||||
|
||||
artifact.getVersion();
|
||||
artifactCtl.setReturnValue( "1", MockControl.ZERO_OR_MORE );
|
||||
|
||||
artifact.getId();
|
||||
artifactCtl.setReturnValue( "groupId:artifactId:jar:1", MockControl.ZERO_OR_MORE );
|
||||
|
||||
artifact.getClassifier();
|
||||
artifactCtl.setReturnValue( null, MockControl.ZERO_OR_MORE );
|
||||
|
||||
pathTranslatorCtl = MockControl.createControl( PathTranslator.class );
|
||||
PathTranslator pt = (PathTranslator) pathTranslatorCtl.getMock();
|
||||
|
||||
Model model = new Model();
|
||||
|
||||
Build build = new Build();
|
||||
build.setDirectory( "target" );
|
||||
|
||||
model.setBuild( build );
|
||||
|
||||
MavenProject project = new MavenProject( model );
|
||||
project.setFile( new File( "pom.xml" ).getAbsoluteFile() );
|
||||
|
||||
artifactCtl.replay();
|
||||
pathTranslatorCtl.replay();
|
||||
|
||||
pd.setPluginArtifact( artifact );
|
||||
pd.setArtifacts( Collections.singletonList( artifact ) );
|
||||
|
||||
config.put( "project", project );
|
||||
config.put( "session", new MavenSession( null, null, null, null, null, null, null, null, null, null ) );
|
||||
config.put( "mojoExecution", new MojoExecution( md ) );
|
||||
|
||||
ComponentRequirement cr = new ComponentRequirement();
|
||||
cr.setRole( PathTranslator.class.getName() );
|
||||
|
||||
wrapper.addComponentRequirement( cr, pt );
|
||||
}
|
||||
|
||||
wrapper.setComponentConfiguration( config );
|
||||
|
||||
TestBuildListener tbl = new TestBuildListener();
|
||||
wrapper.getAntProject().addBuildListener( tbl );
|
||||
|
||||
PrintStream oldOut = System.out;
|
||||
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
try
|
||||
{
|
||||
System.setOut( new PrintStream( baos ) );
|
||||
|
||||
wrapper.execute();
|
||||
}
|
||||
finally
|
||||
{
|
||||
System.setOut( oldOut );
|
||||
}
|
||||
|
||||
System.out.println( "\n\n" + stack.getMethodName() + " executed; verifying...\n\n" );
|
||||
|
||||
if ( includeImplied )
|
||||
{
|
||||
artifactCtl.verify();
|
||||
pathTranslatorCtl.verify();
|
||||
}
|
||||
|
||||
List messages = new ArrayList();
|
||||
if ( !tbl.messages.isEmpty() )
|
||||
{
|
||||
messages.addAll( tbl.messages );
|
||||
}
|
||||
|
||||
messages.add( new String( baos.toByteArray() ) );
|
||||
|
||||
return messages;
|
||||
}
|
||||
|
||||
private static final class TestBuildListener
|
||||
implements BuildListener
|
||||
{
|
||||
private List messages = new ArrayList();
|
||||
|
||||
public void buildFinished( BuildEvent arg0 )
|
||||
{
|
||||
}
|
||||
|
||||
public void buildStarted( BuildEvent arg0 )
|
||||
{
|
||||
}
|
||||
|
||||
public void messageLogged( BuildEvent event )
|
||||
{
|
||||
messages.add( event.getMessage() );
|
||||
}
|
||||
|
||||
public void targetFinished( BuildEvent arg0 )
|
||||
{
|
||||
}
|
||||
|
||||
public void targetStarted( BuildEvent arg0 )
|
||||
{
|
||||
}
|
||||
|
||||
public void taskFinished( BuildEvent arg0 )
|
||||
{
|
||||
}
|
||||
|
||||
public void taskStarted( BuildEvent arg0 )
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
<plugin>
|
||||
<description>Test Plugin</description>
|
||||
<groupId>org.myplugin</groupId>
|
||||
<artifactId>my-plugin</artifactId>
|
||||
<version>1</version>
|
||||
<goalPrefix>myplugin</goalPrefix>
|
||||
<isolatedRealm>false</isolatedRealm>
|
||||
<inheritedByDefault>true</inheritedByDefault>
|
||||
<mojos>
|
||||
<mojo>
|
||||
<goal>test</goal>
|
||||
<description>Build a JAR from the current project.</description>
|
||||
<requiresDirectInvocation>false</requiresDirectInvocation>
|
||||
<requiresProject>false</requiresProject>
|
||||
<requiresReports>false</requiresReports>
|
||||
<aggregator>false</aggregator>
|
||||
<requiresOnline>false</requiresOnline>
|
||||
<inheritedByDefault>true</inheritedByDefault>
|
||||
<implementation>test.build.xml:test</implementation>
|
||||
<language>ant</language>
|
||||
<instantiationStrategy>per-lookup</instantiationStrategy>
|
||||
<executionStrategy>once-per-session</executionStrategy>
|
||||
<parameters>
|
||||
<parameter>
|
||||
<name>basedir</name>
|
||||
<required>true</required>
|
||||
<editable>false</editable>
|
||||
<type>java.io.File</type>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>messageLevel</name>
|
||||
<required>true</required>
|
||||
<editable>false</editable>
|
||||
<type>java.lang.String</type>
|
||||
</parameter>
|
||||
</parameters>
|
||||
<configuration>
|
||||
<basedir implementation="java.io.File">${basedir}</basedir>
|
||||
<messageLevel implementation="java.lang.String">${messageLevel}</messageLevel>
|
||||
</configuration>
|
||||
</mojo>
|
||||
</mojos>
|
||||
</plugin>
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
<plugin>
|
||||
<description>Test Plugin</description>
|
||||
<groupId>org.myplugin</groupId>
|
||||
<artifactId>my-plugin</artifactId>
|
||||
<version>1</version>
|
||||
<goalPrefix>myplugin</goalPrefix>
|
||||
<isolatedRealm>false</isolatedRealm>
|
||||
<inheritedByDefault>true</inheritedByDefault>
|
||||
<mojos>
|
||||
<mojo>
|
||||
<goal>test</goal>
|
||||
<description>Build a JAR from the current project.</description>
|
||||
<requiresDirectInvocation>false</requiresDirectInvocation>
|
||||
<requiresProject>false</requiresProject>
|
||||
<requiresReports>false</requiresReports>
|
||||
<aggregator>false</aggregator>
|
||||
<requiresOnline>false</requiresOnline>
|
||||
<inheritedByDefault>true</inheritedByDefault>
|
||||
<implementation>test.build.xml:test</implementation>
|
||||
<language>ant</language>
|
||||
<instantiationStrategy>per-lookup</instantiationStrategy>
|
||||
<executionStrategy>once-per-session</executionStrategy>
|
||||
<parameters>
|
||||
<parameter>
|
||||
<name>basedir</name>
|
||||
<required>true</required>
|
||||
<editable>false</editable>
|
||||
<type>java.io.File</type>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>messageLevel</name>
|
||||
<required>true</required>
|
||||
<editable>false</editable>
|
||||
<type>java.lang.String</type>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>project</name>
|
||||
<required>true</required>
|
||||
<editable>false</editable>
|
||||
<type>org.apache.maven.project.MavenProject</type>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>session</name>
|
||||
<required>true</required>
|
||||
<editable>false</editable>
|
||||
<type>org.apache.maven.execution.MavenSession</type>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>mojoExecution</name>
|
||||
<required>true</required>
|
||||
<editable>false</editable>
|
||||
<type>org.apache.maven.plugin.MojoExecution</type>
|
||||
</parameter>
|
||||
</parameters>
|
||||
<configuration>
|
||||
<project implementation="org.apache.maven.project.MavenProject">${project}</project>
|
||||
<session implementation="org.apache.maven.execution.MavenSession">${session}</session>
|
||||
<mojoExecution implementation="org.apache.maven.plugin.MojoExecution">${mojoExecution}</mojoExecution>
|
||||
<basedir implementation="java.io.File">${basedir}</basedir>
|
||||
<messageLevel implementation="java.lang.String">${messageLevel}</messageLevel>
|
||||
</configuration>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.project.path.PathTranslator</role>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</mojo>
|
||||
</mojos>
|
||||
</plugin>
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<project>
|
||||
<target name="init-cp" unless="cp-exists">
|
||||
<path id="maven.plugin.classpath" location="path-is-missing"/>
|
||||
</target>
|
||||
|
||||
<target name="test">
|
||||
<condition property="cp-exists">
|
||||
<isreference refid="maven.plugin.classpath"/>
|
||||
</condition>
|
||||
<antcall target="init-cp" inheritall="true"/>
|
||||
|
||||
<property name="cp" refId="maven.plugin.classpath"/>
|
||||
<echo>plugin classpath is: ${cp}</echo>
|
||||
</target>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-script</artifactId>
|
||||
<version>2.2.2-RC1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>maven-script-beanshell</artifactId>
|
||||
|
||||
<name>Maven Beanshell Mojo Support</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-plugin-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-bsh-factory</artifactId>
|
||||
<version>1.0-alpha-7</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
package org.apache.maven.script.beanshell;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import bsh.EvalError;
|
||||
import bsh.Interpreter;
|
||||
import org.apache.maven.plugin.AbstractMojo;
|
||||
import org.apache.maven.plugin.Mojo;
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
import org.apache.maven.plugin.MojoFailureException;
|
||||
import org.codehaus.plexus.component.factory.bsh.BshComponent;
|
||||
|
||||
/**
|
||||
* Mojo adapter for a Beanshell Mojo.
|
||||
*
|
||||
* @todo should log be passed in, or rely on getLog() ?
|
||||
*
|
||||
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
|
||||
* @version $Id$
|
||||
*/
|
||||
public class BeanshellMojoAdapter
|
||||
extends AbstractMojo
|
||||
implements BshComponent
|
||||
{
|
||||
private Mojo mojo;
|
||||
|
||||
private Interpreter interpreter;
|
||||
|
||||
public BeanshellMojoAdapter( Mojo mojo, Interpreter interpreter )
|
||||
{
|
||||
this.mojo = mojo;
|
||||
this.interpreter = interpreter;
|
||||
}
|
||||
|
||||
public void execute()
|
||||
throws MojoExecutionException, MojoFailureException
|
||||
{
|
||||
try
|
||||
{
|
||||
interpreter.set( "logger", getLog() );
|
||||
|
||||
// TODO: set out, err to a print stream that will log at info, error respectively
|
||||
}
|
||||
catch ( EvalError evalError )
|
||||
{
|
||||
throw new MojoExecutionException( "Unable to establish mojo", evalError );
|
||||
}
|
||||
|
||||
mojo.execute();
|
||||
}
|
||||
|
||||
public Interpreter getInterpreter()
|
||||
{
|
||||
return interpreter;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
|
||||
<body>
|
||||
<menu name="Overview">
|
||||
<item name="Introduction" href="index.html"/>
|
||||
<item name="JavaDocs" href="apidocs/index.html"/>
|
||||
<item name="Source Xref" href="xref/index.html"/>
|
||||
<!--item name="FAQ" href="faq.html"/-->
|
||||
</menu>
|
||||
|
||||
<menu ref="parent"/>
|
||||
<menu ref="reports"/>
|
||||
</body>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven</artifactId>
|
||||
<version>2.2.2-RC1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>maven-script</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>Maven Script Support Root</name>
|
||||
|
||||
<modules>
|
||||
<module>maven-script-ant</module>
|
||||
<module>maven-script-beanshell</module>
|
||||
</modules>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
|
||||
<body>
|
||||
<menu ref="parent"/>
|
||||
<menu ref="modules"/>
|
||||
<menu ref="reports"/>
|
||||
</body>
|
||||
</project>
|
||||
Loading…
Reference in New Issue