【问题标题】:How to add a dependency to another project properly using gradle?如何使用 gradle 正确地将依赖项添加到另一个项目?
【发布时间】:2016-06-07 00:23:57
【问题描述】:

您好,我是 gradle 新手,这对我来说有点困惑。我应该如何在我的 gradle 配置中添加一个依赖项以访问 projectA1 中的 B1.java?项目 B 是 gradle 项目,项目 A 只是一个包含另一个 gradle 项目的文件夹。

这是我的结构:

  1. 工作区:
    • 项目A
      • 项目A1
        • ...
        • 在这里我想访问 B1.java
        • build.gradle
      • 项目A2
        • ...
        • build.gradle
    • 项目B
      • 项目B1
        • B1.java
        • ...
        • build.gradle
      • 项目B2
        • ...
        • build.gradle
      • build.gradle

我尝试阅读 gradle 文档,但我不清楚。任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 看看this的帖子。

标签: java gradle dependencies build.gradle project-structure


【解决方案1】:
  1. 在根路径下编辑setting.gradle 并包含您的子项目,然后子项目将能够看到并相互依赖。
root
 |-- build.gradle << very simple bulid.grade , no special thing.
 |-- setting.gradle <<
rootProject.name = 'root'

file("${rootDir}/ProjectA").eachDirMatch(~/.*/) {
    include "ProjectA:${it.name}"
}

file("${rootDir}/ProjectB").eachDirMatch(~/.*/) {
    include "ProjectB:${it.name}"
}
  1. build.gradle 在项目中
root
 |-- ProjectA
        |-- projectA1
            |-- build.gradle  <<
implementation project(':ProjectB:projectB1')

参考:

【讨论】:

  • 第 2 点:应该是 'build.gradle' 而不是 'build.setting'。您能否解释一下它包含“orm:${it.name}”是什么意思以及项目 B 为什么是它的网络?
【解决方案2】:

你应该有这样的结构:

ProjectA
|--projectA1
|----build.gradle
|--projectA2
|----build.gradle
|--settings.gradle
|--build.gradle

ProjectB
|--projectB1
|----build.gradle
|--projectB2
|----build.gradle
|--settings.gradle
|--build.gradle

您可以在项目中链接外部模块。

1) 在你的项目中projectA/settings.gradle

include ':projectA1',':projectA2',':projectB1' 
project(':projectB1').projectDir = new File("/workspace/projectB/projectB1")

2) 在build.gradleprojectA1 模块中添加依赖

dependencies {
    compile project(':projectB1')
}

【讨论】:

  • 我遵循了上述方法,例外是 projectB1 依赖于 projectB2,类似于evaluationDependsOn(':projectB2'),因此在我的 projectA1 中,如果我包含 projectB1,它会抛出一个错误,例如:projectB2 不存在.除了将 projectB2 也添加为 ProjectA 中的子项目之外,还有什么聪明的方法可以解决这个问题吗?
  • 如果你使用evaluationDependsOn(':projectB2'),你必须声明:projectB2否则gradle不知道什么是projectB2。
  • 知道了。谢谢!
  • 但是假设 ProjectB1 是否依赖于其他项目,比如 ProjectB 中的 5 个子项目。那么在这种情况下,我将不得不声明 projectA 中的所有子项目对吗?
  • 正是我需要的!但是,我必须更改两件事才能完成这项工作:implementation 代替 compile 用于 dependencies{}(由 Android Studio 建议)和 .setProjectDir() 用于 settings.gradle
【解决方案3】:

除非项目 A1 和 B1 位于同一个源存储库中并且同时签出和签入,否则您确实应该将项目 B1 作为外部依赖项来依赖。

在项目 A1 build.gradle 中:

dependencies{
    compile 'projectB1group:projectB1module:projectB1version'
}

当然,要使其工作,您必须首先将 B1 二进制文件发布到可从项目 A1 访问的存储库。这可以是外部 nexus/artifactory 类型的 maven 存储库,但也可以是本地 maven .m2 缓存,甚至是普通的旧文件系统。对于 maven 发布,请参阅 maven 或 'maven-publish` 插件。


如果两个项目都位于同一个源代码库中,您应该将 ProjectA 和 ProjectB 组织为根“容器”项目下的子项目。根项目不需要有自己的源代码。

阅读有关在 gradle here 中组织多项目构建的信息。

如果根项目的 settings.gradle 包含包含项目 B1 的包含行,您可以像这样引用根项目下的任何项目:

project(':B1')

所以,在 A1 的 build.gradle 中添加 B1 作为 A1 的依赖项:

compile project('B1')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 2014-09-21
    • 1970-01-01
    • 2016-06-03
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多