java - Gradle 依赖项 : compile project by relative path

标签 java android gradle android-studio

是否可以在 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 的符号链接(symbolic link),但我没有让它按预期工作:

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

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

最佳答案

您可以使用主项目中的“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 方式反射(reflect)“dagger”模块的需要:

dependencies {
  compile project(':dagger')
}

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

关于java - Gradle 依赖项 : compile project by relative path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975745/

相关文章:

android - 单击了哪个 subview ?

java - 如何使用Gradle更改Java属性文件中的值

maven - Gradle-下载依赖项时间歇性地获取套接字关闭异常

java - Android:在Activity中触发onCreate事件

java - Java中的WebSocket Server(hybi 10)发送和接收

java - 而不是多个 if 语句 Java date

java - Gitlab:您指定的目标需要一个项目来执行,但该目录中没有POM

android - 使用抽屉导航更改 fragment (?)布局或 Activity

android - 添加Material Spinner依赖项时出现Gradle同步错误

java - 是否可以仅针对特定风格包含并初始化 HockeyApp SDK?