自定义任务不运行

Lyz*_*yze 5 gradle build.gradle

我的以下项目结构如下所示:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build.gradle\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 out.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Server\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build.gradle\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 plugins\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 TestPlugin-0.1.0.zip\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pluginApi\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build.gradle\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 plugins\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 testPlugin\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 libs\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 TestPlugin-0.1.0.zip\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build.gradle\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 settings.gradle\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我想在主 build.gradle 中创建一个 gradle 任务,它应该执行类似的操作:

\n\n
    \n
  • 删除服务器/插件的内容
  • \n
  • 为plugins/中的每个gradle项目执行“createZip”任务。例如插件/testPlugin:createZip
  • \n
  • 将每个插件 (plugins//build/libs/.zip) 的输出复制到 Server/plugins
  • \n
\n\n

我设法编写了一个像这样的简单任务:

\n\n
task compilePluginsAndCopy() {\n    delete \'Server/plugins\'\n    mkdir \'Server/plugins\'\n\n    subprojects.each { p ->\n        if (p.path.contains("plugins/")) {\n\n            p.createZip\n\n            doLast {\n                copy {\n                    from p.path.substring(1) + \'/build/libs\'\n                    into \'Server/plugins\'\n                }\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我现在运行此任务时,不会创建 zip 文件,也不会删除任何内容。\n但是,当我在其中一个子项目上运行“createZip”任务时,任务compilePluginsAndCopy 将被执行。

\n\n

有人可以帮我吗?

\n

RaG*_*aGe 4

您的任务定义应如下所示:

task compilePluginsAndCopy() << {
...
}
Run Code Online (Sandbox Code Playgroud)

请注意<<.

<<是 的简写doLast。执行此操作的非速记方法是:

task compilePluginsAndCopy() {
    doLast {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您的代码不包含在 doLast 块中,它将在配置阶段执行,这就是您运行不同任务时所看到的。