我有一个Gradle根项目SELECT TO_CHAR(getdate(), 'YYYY-MM-DDThh24:MI:SS');
,包含两个子项目P
和P:foo
。当然,Gradle按字母顺序构建它们:P:bar
,bar
。但是,当我在foo
根目录中说foo
时,我需要首先构建gradle build
。这是因为P
依赖于bar
发布到本地Maven存储库的AAR(Android库)工件。 foo
和bar
都是此类Android库项目。
这看起来很简单,但我无法弄清楚。我读到了foo
,所以在evaluationDependsOn
中,我在第一行说:bar/build.gradle
。唉,这似乎没有任何影响。这个Gradle功能最终是否已被破坏?
使用evaluationDependsOn "foo:"
,我可以强制首先构建compile project
,但这会将编译后的类直接添加到foo
,这是我不想要的。
所以我被困住了。我可以将bar
重命名为foo
,我的所有问题都将消失,但我仍然不愿称之为解决方案。
答案 0 :(得分:5)
好的,让我自己回答这个问题。我想我找到了一个不错的解决方案。
Gradle中的项目依赖项通常用compile project
表示,它不仅构建了另一个项目,还将其他项目的类添加到当前项目的类路径中。如果您只想确保在您的项目之前构建另一个项目,则可以使用任务依赖项。
在我的Android环境中,bar/build.gradle
,我说
preBuild.dependsOn ":foo:build"
一切都很好。现在foo
总是在bar
之前构建。
答案 1 :(得分:0)
这可能会帮助导致问题原因不同的人。
假设我有一个模块base
,该模块生成主模块app
所需的输出,因此我希望在base
之前构建app
。
您可以在项目根目录中检查settings.gradle
并检查配置。
我发现我以前的配置是
include ':app', ':base'
将其更改为
include ':base', ':app'
解决了构建顺序。