2015-12-26 59 views
2

我以下的项目结构是这样的:自定义任务不运行

. 
├── build.gradle 
├── out.txt 
├── Server 
│   ├── build.gradle 
│   ├── plugins 
│   │   └── TestPlugin-0.1.0.zip 
│   └── src 
├── pluginApi 
│   ├── build 
│   ├── build.gradle 
│   └── src 
├── plugins 
│   └── testPlugin 
│    ├── build 
│    │   ├── libs 
│    │   │   └── TestPlugin-0.1.0.zip 
│    ├── build.gradle 
│    └── src 
└── settings.gradle 

现在我想创造主的build.gradle一个gradle这个任务应该做这样的事情:

  • 删除服务器/插件的内容
  • 为plugins /中的每个gradle项目执行“createZip”任务。例如。插件/ testPlugin:createZip
  • 复制从每一个插件输出(插件//建立/库/ .zip文件)到服务器/插件

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

task compilePluginsAndCopy() { 
    delete 'Server/plugins' 
    mkdir 'Server/plugins' 

    subprojects.each { p -> 
     if (p.path.contains("plugins/")) { 

      p.createZip 

      doLast { 
       copy { 
        from p.path.substring(1) + '/build/libs' 
        into 'Server/plugins' 
       } 
      } 
     } 
    } 
} 

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

请问有人能帮助我吗?

回答

2

你的任务定义应该是这样的:

task compilePluginsAndCopy() << { 
... 
} 

注意<<

<<doLast的简写。非短针的方式来做到这一点是:

task compilePluginsAndCopy() { 
    doLast { 
     ... 
    } 
} 

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