Gradle 依赖:通过相对路径编译项目 [英] Gradle dependencies: compile project by relative path

查看:26
本文介绍了Gradle 依赖:通过相对路径编译项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

依赖项{编译项目('../../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)
<块引用>

 依赖项 {编译项目(':libraries:dagger')}

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

解决方案

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

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

包含应用程序"包括匕首"project(':dagger').projectDir = new File('/Users/foo/workspace/stdlib/dagger')

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

依赖项{编译项目(':dagger')}

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

is it possible to specify a dependency in Gradle (in android studio) to another gradle project outside of the current project boundaries? For example with a relative path something like this:

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

So what I trie is something like this:

I have an Android Application. The structure looks like this:

  • MyApp (path is /Users/foo/workspace/MyApp)
    • app (path is /Users/foo/workspace/MyApp/app)

And I have a gradle android library project containing 3 submodules:

  • stdlib (path is /Users/foo/workspace/stdlib)
    • dagger (path is /Users/foo/workspace/stdlib/dagger)
    • utils (path is /Users/foo/workspace/stdlib/utils)
    • http (path is /Users/foo/workspace/stdlib/http)

What I want is to compile the dagger, utils, http module into MyApp project.

The stdlib libraries modules are under heavy development and will grow as MyApp grow. Hence I do not want to push them into a maven repository everytime I make a little change.

So is there a possibility to link other gradle projects somehow? Im looking for a temporarly solution. I will push the std library into maven repository once the source is stable.

Also, as workaround, a solution with sourceSet would be possible. I have also considered to make a libraries folder in MyApp who is a symlink to stdlib, but I didnt get it to work as expected:

  • MyApp (path is /Users/foo/workspace/MyApp)
    • app (path is /Users/foo/workspace/MyApp/app)
    • libraries (symlink to /Users/foo/workspace/stdlib)

 dependencies {
      compile project(':libraries:dagger')
    }

Any idea how to solve such a dependency in gradle?

解决方案

You can include an outside root project module using 'settings.gradle' file from your main project. It must to be a gradle project too and in the specific Android building situation, you must configure every module as an "android-library" plugin project.

For example, in 'MyApp' project settings.gradle you can try this:

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

Your 'MyApp' build.gradle must reflect the need of the 'dagger' module in a relative path Gradle way:

dependencies {
  compile project(':dagger')
}

And that's it. Repeat this step with every external module you need and you'll have a proper Gradle multi-project configuration.

这篇关于Gradle 依赖:通过相对路径编译项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆