Gradle多项目:排序/依赖关系

3

我有一个多项目构建,包括许多子项目。

include ':common'
project( ':common' ).projectDir = new File( rootDir, 'android-common/common' )

include ':setup'
project( ':setup' ).projectDir = new File( rootDir, 'android-setup/setup' )
...

我希望在主项目级别上添加它们之间的排序(或依赖关系)。在上面的示例中,我希望common总是在setup之前构建。看起来我想做的事情是获取对setup:compile(或构建任务命名为何)的引用并添加额外的依赖项。类似于:
tasks[':setup'].dependsOn += tasks[':common:install']

显然这不起作用。这可行吗?
编辑:稍微详细解释一下。 :common 的结果是安装一个 Maven 构件,然后由 :setup 使用。 因此,它们之间的依赖关系很松散。但是,在我们典型的开发周期中,我们仍然希望首先构建 : common
1个回答

2

听起来你想使用项目依赖

project(':setup') {
   dependencies {
     compile project(':common')
   }
}

编辑:看起来你只是想在你的父build.gradle中声明跨项目任务依赖关系。
tasks.getByPath(":setup:compile").dependsOn(":common:install")

请注意,这将导致设置项目在那一点被评估/配置。如果由于某种原因这会引起问题,您可能需要使用评估侦听器。
project("setup").afterEvaluate { setup -> setup.compile.dependsOn ":common:install }

请注意,如果您想在此结构中独立构建安装程序,则必须使用-u命令行选项。

问题在于现在的设置依赖于一个Maven仓库的公共依赖项,而我无法更改它。任何更改都必须在主项目级别完成。设置与公共不同,位于不同的Git仓库中。我们的结构是,我们有许多仓库通过Maven仓库进行“软”依赖,但我们希望使用单个Gradle项目对它们进行开发。 - Jeffrey Blattman
你能解释一下为什么必须使用Maven依赖吗?使用项目依赖项应该在发布时生成正确的依赖元数据。 - Perryn Fowler
因为每个仓库需要独立构建。 - Jeffrey Blattman
你想每次构建 :setup 时都向 Maven 发布一个新的 :common artifact 吗? - Perryn Fowler
是的,没错。我只想要订购子项目构建的执行。我们曾经做出过一个决定,即我们的代码库之间不应该有硬依赖关系,但是现在我们面临着日常开发的现实。 - Jeffrey Blattman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接