Gradle依赖项:按相对路径编译项目

soc*_*qwe 32 java android gradle android-studio

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

dependencies {
  compile project('../../stdlib/dagger')
}
Run Code Online (Sandbox Code Playgroud)

所以我特里是这样的:

我有一个Android应用程序.结构如下所示:

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

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

  • stdlib(路径是/ Users/foo/workspace/stdlib)
    • 匕首(路径是/ 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')
    }
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ert 83

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

例如,在"MyApp"项目设置.gradle中,您可以尝试这样做:

include 'app'
include 'dagger'
project(':dagger').projectDir = new File('/Users/foo/workspace/stdlib/dagger')
Run Code Online (Sandbox Code Playgroud)

你的'MyApp'build.gradle必须以相对路径Gradle的方式反映'匕首'模块的需要:

dependencies {
  compile project(':dagger')
}
Run Code Online (Sandbox Code Playgroud)

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

  • 它工作得很完美,但我想知道为什么```include'dagger'```没有冒号,而```project(':dagger').projectDir```有冒号? (6认同)