【问题标题】:import dependencies from another module从另一个模块导入依赖项
【发布时间】:2021-10-21 23:50:45
【问题描述】:

我认为我在 gradle 中的依赖管理如何工作方面遗漏了一些要点。 假设我有以下项目结构:

project
---api
------api-commons
------api-v1
------api-v2
------api-v3

所有api* 目录都是模块。所有api-v* 都需要一个特定的依赖项(比如说common-dependency)。

我的目标是将其导入api-commons build.gradle 文件:

dependencies {
   implementation 'common-dependency'
}

在其他模块的build.gradle文件中api-v*放:

dependencies{
   implementation project(':api:api-commons')
}

我希望这会起作用,但事实并非如此。 api-v* 模块中的代码就像未声明依赖项一样。事实上,如果我在单个模块中导入依赖项,代码会按预期工作。

我做错了假设吗?依赖继承不是这样工作的吗?

【问题讨论】:

    标签: gradle dependencies


    【解决方案1】:

    implementation 配置中声明依赖项在概念上意味着它在模块内部(它在实现中使用,但不是公共 API 的一部分)。这样的依赖不会暴露给消费者的编译类路径,尽管它仍然在运行时类路径中。

    这种依赖关系建模方式的一个优点是,如果实现依赖关系发生变化,您无需重新编译使用项目。另一个是通过封装它们,消费者不太可能开始直接依赖它们,然后如果你改变它们就会中断。

    如果您想向消费者公开依赖项,您必须将其声明为模块 API 的一部分。您可以通过应用java-library 插件并使用api 配置来做到这一点。

    例子:

    // api-commons/build.gradle
    plugins {
      id 'java-library'
    }
    
    dependencies {
       api 'common-dependency'
    }
    

    Gradle user guide了解更多信息

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 2019-02-25
      • 2017-03-02
      • 2021-09-12
      • 2013-05-08
      • 2023-03-29
      • 2012-04-01
      • 2013-08-15
      • 1970-01-01
      相关资源
      最近更新 更多