You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2011/05/27 04:50:04 UTC
svn commit: r1128144 - in /maven/sandbox/trunk/mae:
mae-api/src/main/java/org/apache/maven/mae/conf/
mae-booter/src/main/java/org/apache/maven/mae/app/
mae-booter/src/main/java/org/apache/maven/mae/boot/
mae-booter/src/main/java/org/apache/maven/mae/bo...
Author: jdcasey
Date: Fri May 27 02:50:04 2011
New Revision: 1128144
URL: http://svn.apache.org/viewvc?rev=1128144&view=rev
Log:
Adding documentation and removing vestigial code from early days.
Modified:
maven/sandbox/trunk/mae/mae-api/src/main/java/org/apache/maven/mae/conf/MAEConfiguration.java
maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/AbstractMAEApplication.java
maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/MAEApplication.java
maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/Maven3BooterLibrary.java
maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedder.java
maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedderBuilder.java
maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/main/MAEMain.java
maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java
maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java
maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/ExtrudablePlexusContainer.java
maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/MAEContainer.java
maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/InstanceBindingModule.java
maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/SelectingTypeBinder.java
Modified: maven/sandbox/trunk/mae/mae-api/src/main/java/org/apache/maven/mae/conf/MAEConfiguration.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-api/src/main/java/org/apache/maven/mae/conf/MAEConfiguration.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-api/src/main/java/org/apache/maven/mae/conf/MAEConfiguration.java (original)
+++ maven/sandbox/trunk/mae/mae-api/src/main/java/org/apache/maven/mae/conf/MAEConfiguration.java Fri May 27 02:50:04 2011
@@ -68,7 +68,7 @@ public class MAEConfiguration
{
}
- public MAEConfiguration withEMBExecutionRequest( final MAEExecutionRequest request )
+ public MAEConfiguration withExecutionRequest( final MAEExecutionRequest request )
{
executionRequest = request;
return this;
Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/AbstractMAEApplication.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/AbstractMAEApplication.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/AbstractMAEApplication.java (original)
+++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/AbstractMAEApplication.java Fri May 27 02:50:04 2011
@@ -21,6 +21,7 @@ package org.apache.maven.mae.app;
import org.apache.log4j.Logger;
import org.apache.maven.mae.MAEException;
+import org.apache.maven.mae.boot.embed.MAEEmbedder;
import org.apache.maven.mae.boot.embed.MAEEmbedderBuilder;
import org.apache.maven.mae.conf.MAEConfiguration;
import org.apache.maven.mae.conf.MAELibrary;
@@ -39,6 +40,14 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+/**
+ * {@link MAEApplication} implementation that provides support for loading a full Maven component
+ * environment, complete with {@link MAELibrary}'s, {@link ComponentSelector} and {@link InstanceRegistry}.
+ * This class supervises the assembly of the environment, giving the application developer an easy
+ * way to inject the behavior he needs.
+ *
+ * @author John Casey
+ */
public abstract class AbstractMAEApplication
implements MAEApplication
{
@@ -56,12 +65,21 @@ public abstract class AbstractMAEApplica
withComponentInstance( new ComponentKey( getClass() ), this );
}
+ /**
+ * Programmatically add a new {@link MAELibrary} instance, beyond those that are automatically
+ * detected via the /META-INF/services/org.apache.maven.mae.conf.MAELibrary files on the
+ * classpath.
+ */
protected final AbstractMAEApplication withLibrary( final MAELibrary library )
{
additionalLibraries.add( library );
return this;
}
+ /**
+ * {@inheritDoc}
+ * @see org.apache.maven.mae.app.MAEApplication#load()
+ */
@Override
public MAEApplication load()
throws MAEException
@@ -69,7 +87,25 @@ public abstract class AbstractMAEApplica
return doLoad();
}
- private synchronized MAEApplication doLoad()
+ /**
+ * Carry out the application loading process. This means:
+ * <br/>
+ * <ul>
+ * <li>Create a new {@link MAEEmbedderBuilder}</li>
+ * <li>Add to that an {@link InstanceLibraryLoader} to handle libraries that were
+ * programmatically added here</li>
+ * <li>Call {@link AbstractMAEApplication#beforeLoading()}</li>
+ * <li>Call {@link AbstractMAEApplication#configureBuilder(MAEEmbedderBuilder)} to allow
+ * fine-tuning of the {@link MAEEmbedderBuilder} instance</li>
+ * <li>Call {@link MAEEmbedderBuilder#build} to create an instance of {@link MAEEmbedder}</li>
+ * <li>For each instance in the {@link InstanceRegistry}, lookup via {@link MAEEmbedder#container()}
+ * to ensure injectable component dependencies are filled</li>
+ * <li>Call {@link AbstractMAEApplication#afterLoading()}</li>
+ * <li>Set the loaded flag, which will prevent this process from repeating for an application
+ * that has already been loaded</li>
+ * </ul>
+ */
+ private synchronized final MAEApplication doLoad()
throws MAEException
{
if ( loaded )
@@ -79,10 +115,9 @@ public abstract class AbstractMAEApplica
final MAEEmbedderBuilder builder = new MAEEmbedderBuilder().withLibraryLoader( new InstanceLibraryLoader( additionalLibraries ) );
- beforeLoading();
configureBuilder( builder );
- builder.build();
+ MAEEmbedder embedder = builder.build();
for ( final ComponentKey<?> key : getInstanceRegistry().getInstances().keySet() )
{
try
@@ -96,55 +131,82 @@ public abstract class AbstractMAEApplica
}
}
- afterLoading();
+ afterLoading( embedder );
loaded = true;
return this;
}
+ /**
+ * Register a new, external component instance for injection into other components, or to
+ * have components injected into it.
+ */
@SuppressWarnings( { "unchecked", "rawtypes" } )
protected final void withComponentInstance( final Object instance )
{
getInstanceRegistry().add( new ComponentKey( instance.getClass() ), instance );
}
+ /**
+ * Register a new {@link VirtualInstance}, which allows the component environment to bind its
+ * requirements without actually having access to the component instance. The instance itself
+ * will be injected into the {@link VirtualInstance} later.
+ */
protected final <C> void withVirtualComponent( final Class<C> virtualClass )
{
getInstanceRegistry().addVirtual( new VirtualInstance<C>( virtualClass ) );
}
+ /**
+ * Set the actual instance on a {@link VirtualInstance} that was registered previously.
+ */
protected final <C, T extends C> void setVirtualInstance( final Class<C> virtualKey, final T instance )
{
getInstanceRegistry().setVirtualInstance( virtualKey, instance );
}
+ /**
+ * Register a new, external component instance to make it available for injection, or to allow
+ * other components to be injected into it.
+ */
protected final <C> void withComponentInstance( final ComponentKey<C> componentKey, final C instance )
{
getInstanceRegistry().add( componentKey, instance );
}
+ /**
+ * Register a new {@link VirtualInstance}, which allows the component environment to bind its
+ * requirements without actually having access to the component instance. The instance itself
+ * will be injected into the {@link VirtualInstance} later.
+ */
protected final <C> void withVirtualComponent( final ComponentKey<C> virtualKey )
{
getInstanceRegistry().addVirtual( virtualKey, new VirtualInstance<C>( virtualKey.getRoleClass() ) );
}
+ /**
+ * Set the actual instance on a {@link VirtualInstance} that was registered previously.
+ */
protected final <C, T extends C> void setVirtualInstance( final ComponentKey<C> virtualKey, final T instance )
{
getInstanceRegistry().setVirtualInstance( virtualKey, instance );
}
+ /**
+ * Fine-tune the {@link MAEEmbedderBuilder} instance before it is used to create the
+ * {@link MAEEmbedder} that will be used to load the application components.
+ */
protected void configureBuilder( final MAEEmbedderBuilder builder )
throws MAEException
{
}
- protected void beforeLoading()
- throws MAEException
- {
- }
-
- protected void afterLoading()
+ /**
+ * Hook allowing application developers access to the {@link MAEEmbedder} just after the registered
+ * external component instances have been injected, but before loading is considered complete.
+ */
+ protected void afterLoading(MAEEmbedder embedder)
throws MAEException
{
}
Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/MAEApplication.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/MAEApplication.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/MAEApplication.java (original)
+++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/app/MAEApplication.java Fri May 27 02:50:04 2011
@@ -22,9 +22,16 @@ package org.apache.maven.mae.app;
import org.apache.maven.mae.MAEException;
import org.apache.maven.mae.conf.MAELibrary;
+/**
+ * Interface providing basic support for loading a Maven component environment.
+ */
public interface MAEApplication
extends MAELibrary
{
+ /**
+ * Assemble the component environment, based on the information given in implementors of this
+ * abstract class and auto-detected libraries.
+ */
MAEApplication load()
throws MAEException;
}
Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/Maven3BooterLibrary.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/Maven3BooterLibrary.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/Maven3BooterLibrary.java (original)
+++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/Maven3BooterLibrary.java Fri May 27 02:50:04 2011
@@ -30,6 +30,6 @@ public class Maven3BooterLibrary
{
public Maven3BooterLibrary()
{
- super( "boot", "EMB-Booter", new MavenPomVersionProvider( "org.commonjava.emb", "emb-booter" ), "core" );
+ super( "boot", "MAE-Booter", new MavenPomVersionProvider( "org.apache.maven.mae", "mae-booter" ), "core" );
}
}
Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedder.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedder.java (original)
+++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedder.java Fri May 27 02:50:04 2011
@@ -32,16 +32,17 @@ import org.apache.maven.execution.MavenE
import org.apache.maven.execution.MavenExecutionResult;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.mae.MAEExecutionRequest;
+import org.apache.maven.mae.app.AbstractMAEApplication;
import org.apache.maven.mae.boot.log.EventLogger;
import org.apache.maven.mae.boot.main.MAEMain;
import org.apache.maven.mae.boot.services.MAEServiceManager;
import org.apache.maven.mae.conf.MAEConfiguration;
import org.apache.maven.mae.conf.MAELibrary;
import org.apache.maven.mae.conf.loader.MAELibraryLoader;
-import org.apache.maven.mae.conf.mgmt.MAEManagementException;
-import org.apache.maven.mae.conf.mgmt.MAEManagementView;
import org.apache.maven.mae.conf.mgmt.LoadOnFinish;
import org.apache.maven.mae.conf.mgmt.LoadOnStart;
+import org.apache.maven.mae.conf.mgmt.MAEManagementException;
+import org.apache.maven.mae.conf.mgmt.MAEManagementView;
import org.apache.maven.mae.internal.container.ComponentKey;
import org.apache.maven.mae.internal.container.ExtrudablePlexusContainer;
import org.apache.maven.project.MavenProject;
@@ -66,8 +67,6 @@ import org.sonatype.plexus.components.se
import org.sonatype.plexus.components.sec.dispatcher.SecUtil;
import org.sonatype.plexus.components.sec.dispatcher.model.SettingsSecurity;
-import com.google.inject.Injector;
-
import java.io.IOException;
import java.io.PrintStream;
import java.util.Collection;
@@ -77,11 +76,18 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
+/**
+ * The core of the embeddable Maven environment. This class is used as the main interface to the embedded
+ * Maven environment for the application developer. The only other interface is component-instance
+ * injection, available through the configuration of {@link AbstractMAEApplication} subclasses.
+ *
+ * @author John Casey
+ */
@Component( role = MAEEmbedder.class )
public class MAEEmbedder
{
- private static boolean embInfoShown;
+ private static boolean infoShown;
private final Logger logger;
@@ -109,6 +115,8 @@ public class MAEEmbedder
private boolean infoPrinted = false;
+ private boolean stopped = false;
+
MAEEmbedder( final Maven maven, final MAEConfiguration embConfiguration, final ExtrudablePlexusContainer container,
final SettingsBuilder settingsBuilder, final MavenExecutionRequestPopulator executionRequestPopulator,
final DefaultSecDispatcher securityDispatcher, final MAEServiceManager serviceManager,
@@ -130,30 +138,54 @@ public class MAEEmbedder
this.showVersion = showVersion;
}
- public synchronized Injector injector()
+// public synchronized Injector injector()
+// throws MAEEmbeddingException
+// {
+// printInfo( null );
+// return container.getInjector();
+// }
+
+ /**
+ * Wire a series of externally managed objects with components from the Maven environment,
+ * according to component annotations in those instances.
+ */
+ public synchronized Map<Object, Throwable> wire( final Object... instances )
throws MAEEmbeddingException
{
+ checkStopped();
+
printInfo( null );
- return container.getInjector();
+ return container.extrudeDependencies( instances );
}
- public synchronized Map<Object, Throwable> wire( final Object... instances )
- throws MAEEmbeddingException
+ protected void checkStopped()
{
- printInfo( null );
- return container.extrudeDependencies( instances );
+ if ( stopped )
+ {
+ throw new IllegalStateException( "This MAEEmbedder instance has been shutdown! It is no longer available for use." );
+ }
}
+ /**
+ * Retrieve the {@link MAEServiceManager} that was initialized to work with this embedded Maven
+ * environment.
+ */
public synchronized MAEServiceManager serviceManager()
- throws MAEEmbeddingException
{
+ checkStopped();
+
printInfo( null );
return serviceManager;
}
+ /**
+ * Execute a Maven build, using the normal request/response paradigm.
+ */
public MavenExecutionResult execute( final MAEExecutionRequest request )
throws MAEEmbeddingException
{
+ checkStopped();
+
final PrintStream oldOut = System.out;
try
{
@@ -170,14 +202,20 @@ public class MAEEmbedder
}
finally
{
- doExecutionFinished();
+ shutdown();
System.setOut( oldOut );
}
}
-
+
+ /**
+ * Encrypt the master password that's used to decrypt settings information such as server
+ * passwords.
+ */
public String encryptMasterPassword( final MAEExecutionRequest request )
throws MAEEmbeddingException
{
+ checkStopped();
+
printInfo( null );
String passwd = request.getPasswordToEncyrpt();
@@ -201,9 +239,14 @@ public class MAEEmbedder
}
}
+ /**
+ * Encrypt a password that will be put in the settings.xml file, as for server authentication.
+ */
public String encryptPassword( final MAEExecutionRequest request )
throws MAEEmbeddingException
{
+ checkStopped();
+
printInfo( null );
final String passwd = request.getPasswordToEncyrpt();
@@ -254,6 +297,8 @@ public class MAEEmbedder
protected void doExecutionStarting()
throws MAEEmbeddingException
{
+ checkStopped();
+
for ( final MAELibrary library : embConfiguration.getLibraries() )
{
final Set<ComponentKey<?>> components = library.getManagementComponents( LoadOnStart.class );
@@ -278,8 +323,19 @@ public class MAEEmbedder
}
}
- protected void doExecutionFinished()
+ /**
+ * Perform any shutdown functions associated with this embedder and its component environment.
+ * <br/>
+ * <b>NOTE:</b> After this method is called, this embedder can no longer be used.
+ */
+ public synchronized void shutdown()
{
+ if ( stopped )
+ {
+ return;
+ }
+
+ stopped = true;
for ( final MAELibrary library : embConfiguration.getLibraries() )
{
final Set<ComponentKey<?>> components = library.getManagementComponents( LoadOnFinish.class );
@@ -306,9 +362,11 @@ public class MAEEmbedder
protected synchronized void injectEnvironment( final MAEExecutionRequest request )
throws MAEEmbeddingException
{
+ checkStopped();
+
injectLogSettings( request );
- initializeEMB( request );
+ initialize( request );
injectProperties( request );
@@ -317,9 +375,9 @@ public class MAEEmbedder
injectFromProperties( request );
}
- private void initializeEMB( final MAEExecutionRequest request )
+ private void initialize( final MAEExecutionRequest request )
{
- embConfiguration.withEMBExecutionRequest( request );
+ embConfiguration.withExecutionRequest( request );
if ( request.isInteractiveMode() )
{
embConfiguration.interactive();
@@ -341,6 +399,8 @@ public class MAEEmbedder
protected void injectFromProperties( final MAEExecutionRequest request )
{
+ checkStopped();
+
String localRepoProperty = request.getUserProperties().getProperty( MAEMain.LOCAL_REPO_PROPERTY );
if ( localRepoProperty == null )
@@ -356,6 +416,8 @@ public class MAEEmbedder
protected void injectLogSettings( final MAEExecutionRequest request )
{
+ checkStopped();
+
final int logLevel = request.getLoggingLevel();
if ( Logger.LEVEL_DEBUG == logLevel )
@@ -463,20 +525,24 @@ public class MAEEmbedder
}
}
- public static void showEMBInfo( final MAEConfiguration embConfig, final List<MAELibraryLoader> loaders,
+ /**
+ * Print information about the {@link MAELibrary} instances loaded into this environment to
+ * the {@link PrintStream} parameter.
+ */
+ public static void showInfo( final MAEConfiguration config, final List<MAELibraryLoader> loaders,
final PrintStream standardOut )
throws IOException
{
- if ( embInfoShown )
+ if ( infoShown )
{
return;
}
standardOut.println();
- standardOut.println( "-- EMB Libraries Loaded --" );
+ standardOut.println( "-- MAE Libraries Loaded --" );
standardOut.println();
- final Collection<MAELibrary> libraries = loadLibraries( embConfig, loaders );
+ final Collection<MAELibrary> libraries = loadLibraries( config, loaders );
for ( final MAELibrary ext : libraries )
{
standardOut.println( "+" + ext.getLabel() + " (Log handle: '" + ext.getLogHandle() + "')" );
@@ -486,14 +552,18 @@ public class MAEEmbedder
standardOut.println( "--------------------------" );
standardOut.println();
- embInfoShown = true;
+ infoShown = true;
}
- public static void showVersion( final MAEConfiguration embConfig, final List<MAELibraryLoader> loaders,
+ /**
+ * Print the information about {@link MAELibrary} instances loaded, along with version information
+ * about this Maven environment in general, to the provided {@link PrintStream} parameter.
+ */
+ public static void showVersion( final MAEConfiguration config, final List<MAELibraryLoader> loaders,
final PrintStream standardOut )
throws IOException
{
- showEMBInfo( embConfig, loaders, standardOut );
+ showInfo( config, loaders, standardOut );
CLIReportingUtils.showVersion( standardOut );
}
@@ -535,6 +605,10 @@ public class MAEEmbedder
}
}
+ /**
+ * Print error output from a Maven execution request, in the familiar format, to the {@link Logger}
+ * instance used by this embedder.
+ */
public int formatErrorOutput( final MAEExecutionRequest request, final MavenExecutionResult result )
{
if ( result.hasExceptions() )
Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedderBuilder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedderBuilder.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedderBuilder.java (original)
+++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/embed/MAEEmbedderBuilder.java Fri May 27 02:50:04 2011
@@ -494,22 +494,22 @@ public class MAEEmbedderBuilder
public synchronized ComponentSelector selector()
{
- return embConfiguration().getComponentSelector();
+ return configuration().getComponentSelector();
}
public synchronized InstanceRegistry instanceRegistry()
{
- return embConfiguration().getInstanceRegistry();
+ return configuration().getInstanceRegistry();
}
- public MAEEmbedderBuilder withEMBConfiguration( final MAEConfiguration config )
+ public MAEEmbedderBuilder withConfiguration( final MAEConfiguration config )
{
embConfiguration = config;
embConfigurationProvided = true;
return this;
}
- public synchronized MAEConfiguration embConfiguration()
+ public synchronized MAEConfiguration configuration()
{
final String[] debugLogHandles = debugLogHandles();
if ( !logHandlesConfigured && debugLogHandles != null )
@@ -545,7 +545,7 @@ public class MAEEmbedderBuilder
if ( debugLogHandles != null
&& Arrays.binarySearch( debugLogHandles, MAEConfiguration.STANDARD_LOG_HANDLE_CORE ) > -1 )
{
- MAEEmbedder.showEMBInfo( embConfiguration, loaders, standardOut() );
+ MAEEmbedder.showInfo( embConfiguration, loaders, standardOut() );
}
}
catch ( final IOException e )
@@ -804,7 +804,7 @@ public class MAEEmbedderBuilder
throws MAEEmbeddingException
{
final MAEEmbedder embedder =
- new MAEEmbedder( maven(), embConfiguration(), container(), settingsBuilder(), executionRequestPopulator(),
+ new MAEEmbedder( maven(), configuration(), container(), settingsBuilder(), executionRequestPopulator(),
securityDispatcher(), serviceManager(), libraryLoaders(), standardOut(), logger(),
shouldShowErrors(), showVersion() );
@@ -819,7 +819,7 @@ public class MAEEmbedderBuilder
if ( embedder == null )
{
logger();
- embConfiguration();
+ configuration();
mavenHome();
wireLogging();
Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/main/MAEMain.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/main/MAEMain.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/main/MAEMain.java (original)
+++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/main/MAEMain.java Fri May 27 02:50:04 2011
@@ -201,7 +201,7 @@ public class MAEMain
{
try
{
- MAEEmbedder.showVersion( cliRequest.builder.embConfiguration(), cliRequest.builder.libraryLoaders(),
+ MAEEmbedder.showVersion( cliRequest.builder.configuration(), cliRequest.builder.libraryLoaders(),
cliRequest.builder.standardOut() );
}
catch ( final IOException e )
@@ -326,7 +326,7 @@ public class MAEMain
if ( commandLine.hasOption( CLIManager.BATCH_MODE ) )
{
request.setInteractiveMode( false );
- cliRequest.builder.embConfiguration().nonInteractive();
+ cliRequest.builder.configuration().nonInteractive();
}
boolean noSnapshotUpdates = false;
Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java (original)
+++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java Fri May 27 02:50:04 2011
@@ -42,11 +42,9 @@ import org.sonatype.aether.util.DefaultR
@Component( role = MAEServiceManager.class )
public class DefaultMAEServiceManager
- implements MAEServiceManager/* , Contextualizable */
+ implements MAEServiceManager
{
- // private final Logger logger = Logger.getLogger( EMBConfiguration.STANDARD_LOG_HANDLE_CORE );
-
@Requirement
private ProjectBuilder projectBuilder;
@@ -87,11 +85,19 @@ public class DefaultMAEServiceManager
// this.container = container;
// }
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public ProjectBuilder projectBuilder()
{
return projectBuilder;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public DefaultProjectBuildingRequest createProjectBuildingRequest()
throws MAEEmbeddingException
{
@@ -106,17 +112,28 @@ public class DefaultMAEServiceManager
return req;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public RepositorySystem mavenRepositorySystem()
{
return repositorySystem;
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public org.sonatype.aether.RepositorySystem aetherRepositorySystem()
{
return aetherRepositorySystem;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public RepositorySystemSession createAetherRepositorySystemSession()
throws MAEEmbeddingException
{
@@ -135,6 +152,10 @@ public class DefaultMAEServiceManager
}
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public RepositorySystemSession createAetherRepositorySystemSession( MavenExecutionRequest request )
throws MAEEmbeddingException
{
@@ -163,6 +184,10 @@ public class DefaultMAEServiceManager
}
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public synchronized ArtifactRepository defaultLocalRepository()
throws MAEEmbeddingException
{
@@ -182,6 +207,9 @@ public class DefaultMAEServiceManager
return defaultLocalRepo;
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public <T> T service( final Class<T> type )
throws MAEEmbeddingException
@@ -207,6 +235,9 @@ public class DefaultMAEServiceManager
}
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public <T> T service( final Class<T> type, final String hint )
throws MAEEmbeddingException
@@ -232,11 +263,4 @@ public class DefaultMAEServiceManager
}
}
- // @Override
- // public void contextualize( final Context ctx )
- // throws ContextException
- // {
- // container = (PlexusContainer) ctx.get( PlexusConstants.PLEXUS_KEY );
- // }
-
}
Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java (original)
+++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java Fri May 27 02:50:04 2011
@@ -22,38 +22,85 @@ package org.apache.maven.mae.boot.servic
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.mae.boot.embed.MAEEmbeddingException;
+import org.apache.maven.mae.conf.MAELibrary;
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.repository.RepositorySystem;
import org.sonatype.aether.RepositorySystemSession;
+/**
+ * Service manager used as an aid in constructing complex objects correctly for use in Maven, such
+ * as {@link RepositorySystemSession} instances, which are used to resolve artifacts, or
+ * {@link ProjectBuildingRequest} instances, used to build maven projects from their corresponding
+ * POM files or artifact coordinates.
+ *
+ * @author John Casey
+ */
public interface MAEServiceManager
{
+ /**
+ * Retrieve the Maven {@link ProjectBuilder} component.
+ */
ProjectBuilder projectBuilder()
throws MAEEmbeddingException;
+ /**
+ * Create a new {@link ProjectBuildingRequest} to be used in building project instances from
+ * POM files or artifact coordinates.
+ */
DefaultProjectBuildingRequest createProjectBuildingRequest()
throws MAEEmbeddingException;
+ /**
+ * Retrieve the Maven {@link RepositorySystem} component.
+ */
RepositorySystem mavenRepositorySystem()
throws MAEEmbeddingException;
+ /**
+ * Retrieve the aether {@link org.sonatype.aether.RepositorySystem} component.
+ */
org.sonatype.aether.RepositorySystem aetherRepositorySystem()
throws MAEEmbeddingException;
+ /**
+ * Create a new {@link RepositorySystemSession} for resolving artifacts, using default configurations.
+ */
RepositorySystemSession createAetherRepositorySystemSession()
throws MAEEmbeddingException;
+ /**
+ * Create a new {@link RepositorySystemSession} for resolving artifacts, based on the configuration
+ * of a {@link MavenExecutionRequest}.
+ */
RepositorySystemSession createAetherRepositorySystemSession( MavenExecutionRequest request )
throws MAEEmbeddingException;
+ /**
+ * Retrieve a component from the Maven component environment, based on its class.
+ * <br/>
+ * <b>NOTE:</b> This method requires that some {@link MAELibrary} present in the current environment
+ * has granted permission to lookup the component in question.
+ */
<T> T service( Class<T> type )
throws MAEEmbeddingException;
+ /**
+ * Retrieve a component from the Maven component environment, based on its class and an implementation
+ * hint.
+ * <br/>
+ * <b>NOTE:</b> This method requires that some {@link MAELibrary} present in the current environment
+ * has granted permission to lookup the component in question.
+ */
<T> T service( Class<T> type, String hint )
throws MAEEmbeddingException;
+ /**
+ * Retrieve an {@link ArtifactRepository} instance configured for the default location of the
+ * Maven local repository.
+ */
ArtifactRepository defaultLocalRepository()
throws MAEEmbeddingException;
Modified: maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/ExtrudablePlexusContainer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/ExtrudablePlexusContainer.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/ExtrudablePlexusContainer.java (original)
+++ maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/ExtrudablePlexusContainer.java Fri May 27 02:50:04 2011
@@ -25,6 +25,13 @@ import com.google.inject.Injector;
import java.util.Map;
+/**
+ * Extension to the {@link MutablePlexusContainer} interface, which allows injection of components
+ * into existing objects. Also, retrieving the Guice {@link Injector} instance used in the container,
+ * for binding into an outer Guice context...
+ *
+ * @author John Casey
+ */
public interface ExtrudablePlexusContainer
extends MutablePlexusContainer
{
Modified: maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/MAEContainer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/MAEContainer.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/MAEContainer.java (original)
+++ maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/MAEContainer.java Fri May 27 02:50:04 2011
@@ -93,6 +93,11 @@ import java.util.concurrent.atomic.Atomi
/**
* {@link PlexusContainer} shim that delegates to a Plexus-aware Guice {@link Injector}.
+ * <br/>
+ * This variant provides supports for {@link ComponentSelector} and {@link InstanceRegistry}, giving
+ * the application developer more control over the component environment.
+ *
+ * @author John Casey
*/
@SuppressWarnings( { "unchecked", "rawtypes" } )
public final class MAEContainer
Modified: maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/InstanceBindingModule.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/InstanceBindingModule.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/InstanceBindingModule.java (original)
+++ maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/InstanceBindingModule.java Fri May 27 02:50:04 2011
@@ -32,10 +32,15 @@ import org.sonatype.guice.plexus.config.
import com.google.inject.Binder;
import com.google.inject.Inject;
import com.google.inject.Injector;
+import com.google.inject.Module;
import com.google.inject.Provider;
import java.util.Map;
+/**
+ * {@link PlexusBeanModule} (variant of Guice {@link Module}), which allows injection of externally
+ * managed object instances into plexus-managed components.
+ */
public class InstanceBindingModule
implements PlexusBeanModule
{
Modified: maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/SelectingTypeBinder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/SelectingTypeBinder.java?rev=1128144&r1=1128143&r2=1128144&view=diff
==============================================================================
--- maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/SelectingTypeBinder.java (original)
+++ maven/sandbox/trunk/mae/mae-container/src/main/java/org/apache/maven/mae/internal/container/guice/SelectingTypeBinder.java Fri May 27 02:50:04 2011
@@ -53,6 +53,11 @@ import java.util.Set;
*
* - PluginManager.class/"default_" => DefaultPluginManager.class
*/
+/**
+ * {@link PlexusTypeListener} implementation that uses a {@link ComponentSelector} to selectively
+ * redirect one component requirement to another component, which was configured by the developer
+ * who's embedding the container/Maven apis.
+ */
public final class SelectingTypeBinder
implements PlexusTypeListener
{