我有以下项目结构:
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
答案 0 :(得分:1)
run
apply plugin: 'distribution'
任务由Application Plugin创建,但该插件不是为图书馆项目设计的。您只能应用Distribution Plugin(apply plugin: 'java'
)或Java Plugin(lib
),它们都是由Application Plugin隐式应用的。这样,您的run
子项目将不会包含run
任务,只会执行子项目client
和server
的{{1}}任务。
否则,如果您确实需要Application Plugin,则可以通过run
文件中的StartParameter
对象排除settings.gradle
任务:
[...] // include subprojects
startParameter.excludedTaskNames << ':lib:run'
此任务将从每个版本中排除。
要管理order of tasks,您可以使用方法shouldRunAfter
和mustRunAfter
(就像dependsOn
):
tasks.getByPath(':client:run').mustRunAfter(tasks.getByPath(':server:run'))