Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* 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.
*/
package org.eclipse.aether.util.graph.manager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Objects;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.collection.DependencyCollectionContext;
import org.eclipse.aether.collection.DependencyManagement;
import org.eclipse.aether.collection.DependencyManager;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.Exclusion;
import org.eclipse.aether.scope.ScopeManager;
import org.eclipse.aether.scope.SystemDependencyScope;
import static java.util.Objects.requireNonNull;
/**
* A dependency manager support class.
*
* This implementation is Maven specific, as it works hand-in-hand along with Maven ModelBuilder. While model builder
* handles dependency management in the context of single POM (inheritance, imports, etc.), this implementation carries
* in-lineage modifications based on previously recorded dependency management rules sourced from ascendants while
* building the dependency graph. Root sourced management rules are special, in a way they are always applied, while
* en-route collected ones are carefully applied to proper descendants only, to not override work done by model
* builder already.
*
* Details: Model builder handles version, scope from own dependency management (think "effective POM"). On the other
* hand it does not handle optional for example. System paths are aligned across whole graph, making sure there is
* same system path used by same dependency. Finally, exclusions (exclusions are additional information not effective
* or applied in same POM) are always applied. This implementation makes sure, that version and scope are not applied
* onto same node that actually provided the rules, to no override work that ModelBuilder did. It achieves this goal
* by tracking "depth" for each collected rule and ignoring rules coming from same depth as processed dependency node is.
*
* @since 2.0.0
*/
public abstract class AbstractDependencyManager implements DependencyManager {
protected final int depth;
protected final int deriveUntil;
protected final int applyFrom;
protected final Map