【发布时间】:2014-11-28 18:50:25
【问题描述】:
信息
所以我的项目结构是这样的:
项目根目录:
|资源模块(使用包名:com.derk.application.resources)
-+ 源代码
---+ 主要
-----+ 资源
|核心模块(使用包名:com.derk.application)
-+ 源代码
---+ 主要
-----+ 源代码
|品牌模块(使用客户域的任何包名)
Resources-module 包含 res 文件。
Core 包含一个 git 模块,其中包含我们不断更新的代码库的代码。
Brand 包含 build.gradle,我在其中设置了客户的包名并将 main/res 目录绑定到资源模块 main/res,然后将 main/src 绑定到 core-module main/src 文件夹。
像这样:
android.sourceSets.main {
manifest.srcFile "src/main/AndroidManifest.xml"
res.srcDirs = ["$rootDir/resources-module/src/main/res"]
java.srcDirs = ["$rootDir/core-module/src/main/java", "src/main/java"]
}
}
我不希望在任何情况下更改核心模块源而不将其推送到主存储库,这意味着我只对使用核心模块的所有项目进行全局更改/修复。这就是我尝试这种结构的原因。
核心模块中的源文件将加载导入
导入 com.derk.application.resources.R;
导入 com.derk.application.resources.BuildConfig;
从 gradle/idea 处理资源生成的内容
由于 Brand-module 是由于 packagename 更改,我必须使用某种包含 R 和 BuildConfig 的中间模块以便于部署,以便 core-sources 确实永远不会进行本地修改。
当我尝试为品牌模块刷新 gradle 时,我没有遇到任何问题,当我检查时,android studio 似乎在 com.derk.application.resources 中找到 R.java 和 BuildConfig.java 就好了在 Android Studio 中去掉链接
但是
当我尝试运行 Brand-module 时,我得到:
"Execution failed for task ':core-module:compileReleaseJava'."
它现在显示给我:
Error:(20, 39) error: package com.derk.application.resources does not exist
还以为我加了
dependencies {
compile project(':resources-module')
}
到 core-module 的 build.gradle。
所以问题是:
如何设置 gradle 来处理这种跨模块依赖?
请记住,我不希望为我设置的每个新项目更改核心模块导入的包名,因为我们会对用于多个项目的 gitmodule 进行本地更改。
/.ps
目前我可以毫无问题地运行模块资源模块并运行应用程序,并使用我为其选择的静态包名。但这也是问题所在,我想让它保持静态,因此我引入了第三个模块。
【问题讨论】:
标签: android gradle android-studio