Author: jdcasey
Date: Wed Jan 30 10:13:07 2008
New Revision: 616825
URL: http://svn.apache.org/viewvc?rev=616825&view=rev
Log:
Fine-tuning an error reporting pointcut, and also adding a method to the
embedder to allow a third party access to the build plan for a specific
project, given a set of goals to be invoked.
Modified:
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj
Modified:
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?rev=616825&r1=616824&r2=616825&view=diff
==============================================================================
---
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
(original)
+++
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
Wed Jan 30 10:13:07 2008
@@ -41,11 +41,16 @@
import org.apache.maven.execution.ReactorManager;
import org.apache.maven.extension.BuildExtensionScanner;
import org.apache.maven.extension.ExtensionScanningException;
+import org.apache.maven.lifecycle.LifecycleException;
import org.apache.maven.lifecycle.LifecycleUtils;
+import org.apache.maven.lifecycle.plan.BuildPlan;
+import org.apache.maven.lifecycle.plan.BuildPlanner;
import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.monitor.event.DefaultEventDispatcher;
+import org.apache.maven.monitor.event.EventDispatcher;
import org.apache.maven.plugin.InvalidPluginException;
import org.apache.maven.plugin.MavenPluginCollector;
import org.apache.maven.plugin.MavenPluginDiscoverer;
@@ -55,6 +60,7 @@
import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
import org.apache.maven.plugin.version.PluginVersionNotFoundException;
import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.DuplicateProjectException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.MavenProjectBuildingResult;
@@ -84,7 +90,9 @@
import org.codehaus.plexus.logging.LoggerManager;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File;
@@ -93,6 +101,7 @@
import java.io.Writer;
import java.net.URL;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -153,6 +162,8 @@
private MavenExecutionRequestPopulator populator;
+ private BuildPlanner buildPlanner;
+
// ----------------------------------------------------------------------
// Configuration
// ----------------------------------------------------------------------
@@ -509,6 +520,46 @@
// Lifecycle information
// ----------------------------------------------------------------------
+ public BuildPlan getBuildPlan( List goals,
+ MavenProject project )
+ throws MavenEmbedderException
+ {
+ MavenExecutionRequest req = new DefaultMavenExecutionRequest( request
);
+ req.setGoals( goals );
+
+ EventDispatcher dispatcher = new DefaultEventDispatcher(
req.getEventMonitors() );
+
+ ReactorManager rm;
+
+ try
+ {
+ rm = new ReactorManager( Collections.singletonList( project ),
ReactorManager.FAIL_FAST );
+ }
+ catch ( CycleDetectedException e )
+ {
+ // impossible, only one project.
+ throw new MavenEmbedderException( "Cycle detected in
single-project reactor manager during build-plan lookup.", e );
+ }
+ catch ( DuplicateProjectException e )
+ {
+ // impossible, only one project.
+ throw new MavenEmbedderException( "Duplicate project detected in
single-project reactor manager during build-plan lookup.", e );
+ }
+
+ MavenSession session = new MavenSession( container, request,
dispatcher, rm );
+
+ try
+ {
+ return buildPlanner.constructBuildPlan( goals, project, session );
+ }
+ catch ( LifecycleException e )
+ {
+ throw new MavenEmbedderException( "Failed to construct build-plan
for project: "
+ + project.getId() + " using
goals: '"
+ + StringUtils.join(
goals.iterator(), ", " ) + "'", e );
+ }
+ }
+
public List getLifecyclePhases()
{
return getBuildLifecyclePhases();
@@ -636,6 +687,8 @@
populator = (MavenExecutionRequestPopulator) container.lookup(
MavenExecutionRequestPopulator.ROLE );
+
+ buildPlanner = (BuildPlanner) container.lookup( BuildPlanner.class
);
artifactHandlerManager = (ArtifactHandlerManager)
container.lookup( ArtifactHandlerManager.ROLE );
Modified:
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj?rev=616825&r1=616824&r2=616825&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj
(original)
+++
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/PBEDerivativeReporterAspect.aj
Wed Jan 30 10:13:07 2008
@@ -66,7 +66,7 @@
}
private pointcut mavenTools_buildArtifactRepository( Repository repo ):
- call( ArtifactRepository MavenTools+.buildArtifactRepository(
Repository ) )
+ execution( ArtifactRepository MavenTools+.buildArtifactRepository(
Repository ) )
&& args( repo );
//
=========================================================================