gradle exclude子项目的运行任务

时间:2017-07-24 08:55:30

标签: java eclipse gradle

我有以下项目结构:

Root project 'rmi-tutorial'
+--- Project ':client'
+--- Project ':lib'
\--- Project ':server'

当我执行root项目的运行任务时,我将收到以下错误:

Execution failed for task ':lib:run'.

如何排除:lib子项目的运行?我不想完全排除子项目,我也不想通过命令行参数手动排除它。当我执行" build"它应该构建lib的root项目的任务。当我执行"运行"根项目它应该只运行子项目" server"和"客户"。

此外,服务器应该在客户端之前运行。知道如何在不按正确顺序手动启动的情况下完成此操作吗?

我知道我能做到:

gradlew.bat build
gradlew.bat server:run
gradlew.bat client:run

但这不是我想要做的。我更喜欢这样的事情:

gradlew.bat run

1 个答案:

答案 0 :(得分:1)

run apply plugin: 'distribution'任务由Application Plugin创建,但该插件不是为图书馆项目设计的。您只能应用Distribution Pluginapply plugin: 'java')或Java Pluginlib),它们都是由Application Plugin隐式应用的。这样,您的run子项目将不会包含run任务,只会执行子项目clientserver的{​​{1}}任务。

否则,如果您确实需要Application Plugin,则可以通过run文件中的StartParameter对象排除settings.gradle任务:

[...] // include subprojects

startParameter.excludedTaskNames << ':lib:run'

此任务将从每个版本中排除。

要管理order of tasks,您可以使用方法shouldRunAftermustRunAfter(就像dependsOn):

tasks.getByPath(':client:run').mustRunAfter(tasks.getByPath(':server:run'))