aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java199
1 files changed, 199 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
new file mode 100644
index 00000000..1b99a3be
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
@@ -0,0 +1,199 @@
+package org.apache.maven.execution;
+
+/*
+ * 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.ArtifactUtils;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.DuplicateProjectException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectSorter;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Deprecated
+public class ReactorManager
+{
+ public static final String FAIL_FAST = "fail-fast";
+
+ public static final String FAIL_AT_END = "fail-at-end";
+
+ public static final String FAIL_NEVER = "fail-never";
+
+ public static final String MAKE_MODE = "make";
+
+ public static final String MAKE_DEPENDENTS_MODE = "make-dependents";
+
+ // make projects that depend on me, and projects that I depend on
+ public static final String MAKE_BOTH_MODE = "make-both";
+
+ private List<String> blackList = new ArrayList<String>();
+
+ private Map<String, BuildFailure> buildFailuresByProject = new HashMap<String, BuildFailure>();
+
+ private Map pluginContextsByProjectAndPluginKey = new HashMap();
+
+ private String failureBehavior = FAIL_FAST;
+
+ private final ProjectSorter sorter;
+
+ private Map<String, BuildSuccess> buildSuccessesByProject = new HashMap<String, BuildSuccess>();
+
+ public ReactorManager( List<MavenProject> projects )
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ this.sorter = new ProjectSorter( projects );
+ }
+
+ public Map getPluginContext( PluginDescriptor plugin, MavenProject project )
+ {
+ Map pluginContextsByKey = (Map) pluginContextsByProjectAndPluginKey.get( project.getId() );
+
+ if ( pluginContextsByKey == null )
+ {
+ pluginContextsByKey = new HashMap();
+ pluginContextsByProjectAndPluginKey.put( project.getId(), pluginContextsByKey );
+ }
+
+ Map pluginContext = (Map) pluginContextsByKey.get( plugin.getPluginLookupKey() );
+
+ if ( pluginContext == null )
+ {
+ pluginContext = new HashMap();
+ pluginContextsByKey.put( plugin.getPluginLookupKey(), pluginContext );
+ }
+
+ return pluginContext;
+ }
+
+ public void setFailureBehavior( String failureBehavior )
+ {
+ if ( failureBehavior == null )
+ {
+ this.failureBehavior = FAIL_FAST; // default
+ return;
+ }
+ if ( FAIL_FAST.equals( failureBehavior ) || FAIL_AT_END.equals( failureBehavior )
+ || FAIL_NEVER.equals( failureBehavior ) )
+ {
+ this.failureBehavior = failureBehavior;
+ }
+ else
+ {
+ throw new IllegalArgumentException( "Invalid failure behavior (must be one of: \'" + FAIL_FAST + "\', \'"
+ + FAIL_AT_END + "\', \'" + FAIL_NEVER + "\')." );
+ }
+ }
+
+ public String getFailureBehavior()
+ {
+ return failureBehavior;
+ }
+
+ public void blackList( MavenProject project )
+ {
+ blackList( getProjectKey( project ) );
+ }
+
+ private void blackList( String id )
+ {
+ if ( !blackList.contains( id ) )
+ {
+ blackList.add( id );
+
+ List<String> dependents = sorter.getDependents( id );
+
+ if ( dependents != null && !dependents.isEmpty() )
+ {
+ for ( String dependentId : dependents )
+ {
+ if ( !buildSuccessesByProject.containsKey( dependentId )
+ && !buildFailuresByProject.containsKey( dependentId ) )
+ {
+ blackList( dependentId );
+ }
+ }
+ }
+ }
+ }
+
+ public boolean isBlackListed( MavenProject project )
+ {
+ return blackList.contains( getProjectKey( project ) );
+ }
+
+ private static String getProjectKey( MavenProject project )
+ {
+ return ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
+ }
+
+ public void registerBuildFailure( MavenProject project, Exception error, String task, long time )
+ {
+ buildFailuresByProject.put( getProjectKey( project ), new BuildFailure( project, time, error ) );
+ }
+
+ public boolean hasBuildFailures()
+ {
+ return !buildFailuresByProject.isEmpty();
+ }
+
+ public boolean hasBuildFailure( MavenProject project )
+ {
+ return buildFailuresByProject.containsKey( getProjectKey( project ) );
+ }
+
+ public boolean hasMultipleProjects()
+ {
+ return sorter.hasMultipleProjects();
+ }
+
+ public List<MavenProject> getSortedProjects()
+ {
+ return sorter.getSortedProjects();
+ }
+
+ public boolean hasBuildSuccess( MavenProject project )
+ {
+ return buildSuccessesByProject.containsKey( getProjectKey( project ) );
+ }
+
+ public void registerBuildSuccess( MavenProject project, long time )
+ {
+ buildSuccessesByProject.put( getProjectKey( project ), new BuildSuccess( project, time ) );
+ }
+
+ public BuildFailure getBuildFailure( MavenProject project )
+ {
+ return (BuildFailure) buildFailuresByProject.get( getProjectKey( project ) );
+ }
+
+ public BuildSuccess getBuildSuccess( MavenProject project )
+ {
+ return (BuildSuccess) buildSuccessesByProject.get( getProjectKey( project ) );
+ }
+
+ public boolean executedMultipleProjects()
+ {
+ return buildFailuresByProject.size() + buildSuccessesByProject.size() > 1;
+ }
+}