Gradle 依赖:通过相对路径编译项目 [英] Gradle dependencies: compile project by relative path
问题描述
是否可以在 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屋!