public function build(array $taskConfigurations)
    {
        $resolver = new OptionsResolver();
        $tasks = [];
        
        foreach ($taskConfigurations as $taskName => $taskConfiguration) {
            $resolver->clear();

            // debug mode
            if ($this->debug === true) {
                $taskConfiguration['debug'] = $this->debug;
            }
            // add copy filter in last position if required
            if (!$this->hasCopyFilter($taskConfiguration)) {
                $taskConfiguration['filters'][] = 'copy';
            }

            $configuration = new TaskConfiguration();
            $configuration->configureOptions($resolver);
            $configuration->setParameters($resolver->resolve($taskConfiguration));

            $task = new Task($taskName, $configuration);
            $tasks[$taskName] = $task;
        }

        return $tasks;
    }