【发布时间】:2017-07-08 20:12:56
【问题描述】:
我有一个 Gradle 根项目 P 和两个子项目 P:foo 和 P:bar。自然,Gradle 按字母顺序构建它们:bar、foo。但是当我在P 根目录中说gradle build 时,我需要先构建foo。这是因为bar 依赖于foo 发布到本地Maven 存储库的AAR(Android 库)工件。 bar 和 foo 都是这样的 Android 库项目。
这看起来是个简单的问题,但我想不通。我读到了evaluationDependsOn,所以在bar/build.gradle,我在第一行说:evaluationDependsOn "foo:"。唉,这似乎没有任何效果。这个 Gradle 功能到底是不是坏掉了?
使用compile project,我可以强制先构建foo,但这会将编译后的类直接添加到bar,这是我不想要的。
所以我被困住了。我可以将 foo 重命名为 aaa_foo,我的所有问题都会消失,但我不敢称其为解决方案。
【问题讨论】:
-
"使用编译项目,我可以强制首先构建 foo,但这会将编译后的类直接添加到 bar,这是我不想要的" -- 仅当
bar是一个应用程序时模块,在这种情况下,您应该希望在其中包含foo类。如果bar是一个库模块,foo类将不会进入barAAR。 -
如果我说
compile project,Gradle 会尝试链接库两次(一次用于compile project,一次用于 Maven-repository 依赖项),我收到错误消息“错误:超过一个包名为“com.acme.frob”的库。 -
那么你的 Gradle 构建脚本有问题。由于您的问题不包括它们,因此我无法确切告诉您哪里出错了。但几乎我的每个 CWAC 库都有两个模块:库和链接到库的演示项目。有时一个项目有两个库或两个演示。它们都使用
compile project()(用于同一整体项目中的库到库依赖项)或debugCompile project()(用于演示到库的依赖项,我使用releaseCompile来确认我可以从我的工件存储库中提取) )。 -
我更新了问题文本以使其更加清晰。这两个项目都是库项目——它们都推送到本地 Maven 存储库。
-
我的 CWAC-NetSecurity 库有两个库模块(
netsecurity和netsecurity-netcipher)。项目参考工作正常。我在之前的评论中确实犯了一个错误,因为我使用debugCompile project()而不是compile project()来表达netsecurity-netcipher如何依赖netsecurity。
标签: android gradle build module