【问题标题】:Gradle dependencies: compile project by relative pathGradle 依赖:通过相对路径编译项目
【发布时间】:2014-09-18 11:45:07
【问题描述】:

是否可以在 Gradle(在 android studio 中)指定对当前项目边界之外的另一个 gradle 项目的依赖?例如,相对路径是这样的:

dependencies {
  compile project('../../stdlib/dagger')
}

所以我尝试的是这样的:

我有一个 Android 应用程序。结构如下:

  • MyApp(路径为 /Users/foo/workspace/MyApp)
    • app(路径是/Users/foo/workspace/MyApp/app)

我有一个包含 3 个子模块的 gradle android 库项目:

  • stdlib(路径是 /Users/foo/workspace/stdlib)
    • dagger(路径为 /Users/foo/workspace/stdlib/dagger)
    • utils(路径为 /Users/foo/workspace/stdlib/utils)
    • http(路径是/Users/foo/workspace/stdlib/http)

我想要的是将dagger、utils、http模块编译到MyApp项目中。

stdlib 库模块正在大量开发中,并将随着 MyApp 的增长而增长。因此,我不想每次进行一些更改时都将它们推送到 maven 存储库中。

那么有没有可能以某种方式链接其他 gradle 项目? 我正在寻找临时解决方案。一旦源稳定,我会将std库推送到maven存储库中。

此外,作为解决方法,使用 sourceSet 的解决方案也是可能的。我还考虑在 MyApp 中创建一个库文件夹,它是 stdlib 的符号链接,但我没有让它按预期工作:

  • MyApp(路径为 /Users/foo/workspace/MyApp)
    • app(路径是/Users/foo/workspace/MyApp/app)
    • 库(到 /Users/foo/workspace/stdlib 的符号链接)
 dependencies {
      compile project(':libraries:dagger')
    }

知道如何在 gradle 中解决这种依赖关系吗?

【问题讨论】:

    标签: java android gradle android-studio


    【解决方案1】:

    您可以使用主项目中的“settings.gradle”文件包含外部根项目模块。它也必须是一个 gradle 项目,并且在特定的 Android 构建情况下,您必须将每个模块配置为“android-library”插件项目。

    例如,在 'MyApp' 项目 settings.gradle 你可以试试这个:

    include 'app'
    include 'dagger'
    project(':dagger').projectDir = new File('/Users/foo/workspace/stdlib/dagger')
    

    您的“MyApp”build.gradle 必须以相对路径 Gradle 方式反映“dagger”模块的需要:

    dependencies {
      compile project(':dagger')
    }
    

    就是这样。对您需要的每个外部模块重复此步骤,您将拥有正确的 Gradle 多项目配置。

    【讨论】:

    • 当我尝试这个时,我得到一个A problem occurred evaluating project ':account'. > Cannot get property 'compileSdkVersion' on extra properties extension as it does not exist 帐户是我的外部项目
    • 效果很好,但我想知道为什么include 'dagger'没有冒号,而project(':dagger').projectDir有冒号?
    • @howerknea 这是因为在 build.gradle 中您使用的是特定的 Gradle 项目 API,它具有与“设置”对象的构造函数不同的 sintaxis 方法调用。 “设置”对象用于查找和执行每个项目 API 配置:它可以是一个或多个。所以,不要太在意它,这只是 Gradle Settings 对象和 Gradle Project API 接口之间的区别。
    • 死线程,但参考Martin给出的部分答案,>它也必须是一个gradle项目并且在特定的Android构建情况下,您必须将每个模块配置为“android- library”插件项目是什么意思?我是否需要在引用项目的构建 gradle 中添加“com.android-library”?
    • 嗨@pingOfDoom!是的,在模块的 build.gradle 中,您需要指定“com.android.library”。注意点而不是破折号,因为最近我在尝试用破折号编译时遇到了问题。
    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2016-04-09
    • 2015-05-13
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多