【Gradle源码系列2】Java ModuleDependency方法示例源码详解

【Gradle源码系列2】Java ModuleDependency方法示例源码详解

ModuleDependency

ModuleDependency 接口表示对当前项目外的模块的依赖关系。

方法:

  • addArtifact(DependencyArtifact artifact): 将构件添加到此依赖项。
  • artifact(Closure configureClosure): 向此依赖项添加构件。
  • artifact(Action<? super DependencyArtifact> configureAction): 向此依赖项添加构件。
  • attributes(Action<? super AttributeContainer> configureAction): 修改此依赖项的属性。
  • capabilities(Action<? super ModuleDependencyCapabilitiesHandler> configureAction): 配置此依赖项的请求能力。
  • copy(): 创建并返回一个具有此依赖项的属性值的新依赖项。
  • doNotEndorseStrictVersions(): 重置此依赖项的 isEndorsingStrictVersions() 状态。
  • endorseStrictVersions(): 使用目标模块的 VersionConstraint.getStrictVersion() 严格版本来认可版本约束
  • exclude(Map<String, String> excludeProperties): 添加一个排除规则,以排除此依赖项的传递性依赖项
  • getArtifacts(): 返回此依赖项的构件。
  • getAttributes(): 返回此依赖项的属性。
  • getExcludeRules(): 返回此依赖项的排除规则
  • getRequestedCapabilities(): 返回此依赖项的请求能力集合。
  • getTargetConfiguration(): 返回此依赖项的目标配置。
  • isEndorsingStrictVersions(): 检查目标模块的 VersionConstraint.getStrictVersion() 严格版本依赖约束是否被认可。
  • isTransitive(): 返回此依赖项是否应该解析其传递性依赖项
  • setTargetConfiguration(String name): 设置此依赖项的目标配置
  • setTransitive(boolean transitive): 设置是否解析此依赖项的传递性依赖项。

示例

plugins {
    id 'java' // so that I can declare 'implementation' dependencies
}

dependencies {
  implementation('org.hibernate:hibernate:3.1') {
    // excluding a particular transitive dependency:
    exclude module: 'cglib' //by artifact name
    exclude group: 'org.jmock' //by group
    exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
  }
}

源码

/**
 * ModuleDependency接口表示对当前项目外的模块的依赖关系。
 *
 * <p>
 * 有关配置排除规则的示例,请参见{@link #exclude(java.util.Map)}。
 */
public interface ModuleDependency extends Dependency, HasConfigurableAttributes<ModuleDependency> {
    /**
     * 添加一个排除规则,以排除此依赖项的传递性依赖项。
     * <p>
     * 排除特定的传递性依赖项并不能保证它不会出现在给定配置的依赖项中。
     * 例如,某个不具有任何排除规则的其他依赖项可能会引入完全相同的传递性依赖项。
     * 要确保从整个配置(或类路径)中排除传递性依赖项,请使用每个配置的排除规则:{@link Configuration#getExcludeRules()}。
     * 实际上,在大多数情况下,配置每个依赖项的真正意图实际上是从整个配置(或类路径)中排除依赖项。
     * <p>
     * 如果您的意图是排除特定的传递性依赖项,
     * 是因为您不喜欢它引入到配置中的版本,
     * 那么考虑使用强制版本功能:{@link ResolutionStrategy#force(Object...)}。
     *
     * @param excludeProperties 定义排除规则的属性。
     * @return this
     */
    ModuleDependency exclude(Map<String, String> excludeProperties);

    /**
     * 返回此依赖项的排除规则。
     *
     * @see #exclude(java.util.Map)
     */
    Set<ExcludeRule> getExcludeRules();

    /**
     * 返回此依赖项的构件。
     *
     * @see #addArtifact(DependencyArtifact)
     */
    Set<DependencyArtifact> getArtifacts();

    /**
     * 将构件添加到此依赖项。
     *
     * <p>如果未向依赖项添加构件,则使用隐式默认构件。此默认构件与模块名称相同,其类型和扩展名为{@code jar}。
     * 如果至少明确添加了一个构件,则不再使用隐式默认构件。</p>
     *
     * @return this
     */
    ModuleDependency addArtifact(DependencyArtifact artifact);

    /**
     * 向此依赖项添加构件。给定闭包会接收一个{@link org.gradle.api.artifacts.DependencyArtifact}实例,并进行配置。
     *
     * <p>如果未向依赖项添加构件,则使用隐式默认构件。此默认构件与模块名称相同,其类型和扩展名为{@code jar}。
     * 如果至少明确添加了一个构件,则不再使用隐式默认构件。</p>
     *
     * @return 添加的构件
     *
     * @see DependencyArtifact
     */
    DependencyArtifact artifact(@DelegatesTo(value = DependencyArtifact.class, strategy = DELEGATE_FIRST) Closure configureClosure);

    /**
     * 向此依赖项添加构件。给定动作会接收一个{@link org.gradle.api.artifacts.DependencyArtifact}实例,并进行配置。
     *
     * <p>如果未向依赖项添加构件,则使用隐式默认构件。此默认构件与模块名称相同,其类型和扩展名为{@code jar}。
     * 如果至少明确添加了一个构件,则不再使用隐式默认构件。</p>
     *
     * @return 添加的构件
     *
     * @see DependencyArtifact
     *
     * @since 3.1
     */
    DependencyArtifact artifact(Action<? super DependencyArtifact> configureAction);

    /**
     * 返回此依赖项是否应该解析其传递性依赖项。
     *
     * @see #setTransitive(boolean)
     */
    boolean isTransitive();

    /**
     * 设置是否解析此依赖项的传递性依赖项。该依赖项所属的构件本身可能对其他构件有依赖关系,这些依赖关系称为传递性依赖项。
     *
     * @param transitive 是否解析传递性依赖项
     * @return this
     */
    ModuleDependency setTransitive(boolean transitive);

    /**
     * 返回此依赖项的目标配置。这是在选择匹配配置时应使用的目标模块中的配置的名称。如果为{@code null},将使用默认配置。
     */
    @Nullable
    String getTargetConfiguration();

    /**
     * 设置此依赖项的目标配置。这是在选择匹配配置时应使用的目标模块中的配置的名称。如果为{@code null},将使用默认配置。
     *
     * @since 4.0
     */
    void setTargetConfiguration(@Nullable String name);

    /**
     * {@inheritDoc}
     */
    @Override
    ModuleDependency copy();

    /**
     * 返回此依赖项的属性。对依赖项属性的修改必须通过{@link #attributes(Action)}方法进行。
     *
     * @return 此依赖项的属性容器
     *
     * @since 4.8
     */
    @Override
    AttributeContainer getAttributes();

    /**
     * 修改此依赖项的属性。在依赖项解析过程中,属性用于选择适当的目标变体,特别是当单个组件提供不同变体时。
     *
     * @param configureAction 属性修改操作
     * @return this
     *
     * @since 4.8
     */
    @Override
    ModuleDependency attributes(Action<? super AttributeContainer> configureAction);

    /**
     * 配置此依赖项的请求能力。
     *
     * @param configureAction 配置操作
     * @return this
     *
     * @since 5.3
     */
    ModuleDependency capabilities(Action<? super ModuleDependencyCapabilitiesHandler> configureAction);

    /**
     * 返回此依赖项的请求能力集合。
     * @return 请求能力的不可变视图。更新必须通过调用{@link #capabilities(Action)}来完成。
     *
     * @since 5.3
     */
    List<Capability> getRequestedCapabilities();

    /**
     * 使用目标模块的{@link VersionConstraint#getStrictVersion()}严格版本}来认可版本约束。
     *
     * 认可另一个模块/平台的严格版本意味着在依赖项解析期间,所有严格版本将被解释为如果它们是由认可模块自身定义的一样。
     *
     * @since 6.0
     */
    void endorseStrictVersions();

    /**
     * 重置此依赖项的{@link #isEndorsingStrictVersions()}状态。
     *
     * @since 6.0
     */
    void doNotEndorseStrictVersions();

    /**
     * 目标模块的{@link VersionConstraint#getStrictVersion()}严格版本}依赖约束是否被认可?
     *
     * @since 6.0
     */
    boolean isEndorsingStrictVersions();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值