blob: 00e07ea9fd1a7108c50a00fb6d7a063156d3d360 [file] [log] [blame]
/*
* 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
*
* https://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.apache.ivy.core.module.descriptor;
import org.apache.ivy.core.module.id.ArtifactId;
import org.apache.ivy.core.module.id.ModuleId;
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.plugins.namespace.Namespace;
import org.apache.ivy.util.extendable.ExtendableItem;
/**
* Describes a dependency from a depender to a dependee.
* <p>
* The main information this descriptor contains is the constraint on the dependency. There is
* actually two kind of dependency constraints: the default dependency constraint, which can be
* obtained with {@link #getDependencyRevisionId()}, and corresponds to the <code>rev</code>
* attribute in Ivy files. This is the constraint as it should be honored by Ivy in default resolve
* mode.
* </p>
* <p>
* Then there is the dynamic constraint, which can either be the same as the default constraint, or
* the original dependency constraint when an Ivy file is delivered an published to a
* repository. This dynamic constraint is returned by
* {@link #getDynamicConstraintDependencyRevisionId()}, and corresponds to the
* <code>revconstraint</code> attribute in the Ivy file. In some resolve mode, this constraint can
* be used instead of the default dependency constraint when performing dependency resolution.
* </p>
*/
public interface DependencyDescriptor extends ExtendableItem, InheritableItem {
ModuleId getDependencyId();
/**
* Used to indicate that this revision must be used in case of conflicts, independently of
* conflicts manager. This only works for direct dependencies, and not transitive ones.
*
* @return true if this dependency should be used, false if conflicts manager can do its work.
*/
boolean isForce();
/**
* Used to indicate that this dependency is a changing one. A changing dependency in ivy means
* that the revision may have its artifacts modified without revision change. When new artifacts
* are published a new ivy file should also be published with a new publication date to indicate
* to ivy that artifacts have changed and that they should be downloaded again.
*
* @return true if this dependency is a changing one
*/
boolean isChanging();
boolean isTransitive();
ModuleRevisionId getParentRevisionId();
/**
* Returns the constraint on dependency this descriptor represents.
*
* @return the constraint on dependency.
*/
ModuleRevisionId getDependencyRevisionId();
/**
* Returns the dynamic constraint on dependency this descriptor represents.
*
* @return the dynamic constraint on dependency, or exact constraint if no dynamic constraint is
* specified.
*/
ModuleRevisionId getDynamicConstraintDependencyRevisionId();
String[] getModuleConfigurations();
String[] getDependencyConfigurations(String moduleConfiguration, String requestedConfiguration);
String[] getDependencyConfigurations(String moduleConfiguration);
String[] getDependencyConfigurations(String[] moduleConfigurations);
Namespace getNamespace();
DependencyArtifactDescriptor[] getAllDependencyArtifacts();
DependencyArtifactDescriptor[] getDependencyArtifacts(String moduleConfigurations);
DependencyArtifactDescriptor[] getDependencyArtifacts(String[] moduleConfigurations);
IncludeRule[] getAllIncludeRules();
IncludeRule[] getIncludeRules(String moduleConfigurations);
IncludeRule[] getIncludeRules(String[] moduleConfigurations);
ExcludeRule[] getAllExcludeRules();
ExcludeRule[] getExcludeRules(String moduleConfigurations);
ExcludeRule[] getExcludeRules(String[] moduleConfigurations);
/**
* Returns true if
*
* @param moduleConfigurations ditto
* @param artifactId ditto
* @return boolean
*/
boolean doesExclude(String[] moduleConfigurations, ArtifactId artifactId);
/**
* @return true if this descriptor contains any exclusion rule
*/
boolean canExclude();
DependencyDescriptor asSystem();
/**
* Clones current dependency descriptor with another revision.
*
* @param revision
* the revision of the cloned dependency descriptor
* @return the cloned dependency descriptor
* @throws IllegalArgumentException
* if the given {@link ModuleRevisionId} has not the same {@link ModuleId} as the
* {@link ModuleRevisionId} of this descriptor.
*/
DependencyDescriptor clone(ModuleRevisionId revision);
}