【问题标题】:gradle exclude run task for subprojectgradle 排除子项目的运行任务
【发布时间】:2017-07-24 08:55:30
【问题描述】:

我有以下项目结构:

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

当我执行根项目的运行任务时,我会得到以下错误:

Execution failed for task ':lib:run'.

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

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

我知道我能做到:

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

但这不是我想要做的。我更喜欢这样的东西:

gradlew.bat run

【问题讨论】:

    标签: java eclipse gradle


    【解决方案1】:

    run 任务由Application Plugin 创建,但该插件不是为库项目设计的。您只能应用 Distribution Plugin (apply plugin: 'distribution') 或 Java Plugin (apply plugin: 'java'),它们都由应用程序插件隐式应用。这样,您的lib 子项目将不包含run 任务,而只会执行子项目clientserverrun 任务。

    否则,如果您确实需要应用程序插件,您可以通过StartParameter 文件中的StartParameter 对象排除run 任务:

    [...] // include subprojects
    
    startParameter.excludedTaskNames << ':lib:run'
    

    此任务将从每个构建中排除。

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

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

    【讨论】:

    • 您好,感谢您的回答。您知道我如何fork 服务器进程吗?因为现在它挂在状态:server:run 因为java应用程序不会fork。
    • 如果您有其他问题,请提出其他问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2020-09-06
    相关资源
    最近更新 更多