/* * Copyright 2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.gradle.api.tasks; import groovy.lang.Closure; import org.gradle.api.*; import org.gradle.internal.HasInternalProtocol; import java.util.Map; /** * <p>A {@code TaskContainer} is responsible for managing a set of {@link Task} instances.</p> * * <p>You can obtain a {@code TaskContainer} instance by calling {@link org.gradle.api.Project#getTasks()}, or using the * {@code tasks} property in your build script.</p> */ @HasInternalProtocol public interface TaskContainer extends TaskCollection<Task>, PolymorphicDomainObjectContainer<Task> { /** * <p>Locates a task by path. You can supply a task name, a relative path, or an absolute path. Relative paths are * interpreted relative to the project for this container. This method returns null if no task with the given path * exists.</p> * * @param path the path of the task to be returned * @return The task. Returns null if so such task exists. */ Task findByPath(String path); /** * <p>Locates a task by path. You can supply a task name, a relative path, or an absolute path. Relative paths are * interpreted relative to the project for this container. This method throws an exception if no task with the given * path exists.</p> * * @param path the path of the task to be returned * @return The task. Never returns null * @throws UnknownTaskException If no task with the given path exists. */ Task getByPath(String path) throws UnknownTaskException; /** * <p>Creates a {@link Task} and adds it to this container. A map of creation options can be passed to this method * to control how the task is created. The following options are available:</p> * * <table> * * <tr><th>Option</th><th>Description</th><th>Default Value</th></tr> * * <tr><td><code>{@value org.gradle.api.Task#TASK_NAME}</code></td><td>The name of the task to create.</td><td>None. * Must be specified.</td></tr> * * <tr><td><code>{@value org.gradle.api.Task#TASK_TYPE}</code></td><td>The class of the task to * create.</td><td>{@link org.gradle.api.DefaultTask}</td></tr> * * <tr><td><code>{@value org.gradle.api.Task#TASK_ACTION}</code></td><td>The closure or {@link Action} to * execute when the task executes. See {@link Task#doFirst(Action)}.</td><td><code>null</code></td></tr> * * <tr><td><code>{@value org.gradle.api.Task#TASK_OVERWRITE}</code></td><td>Replace an existing * task?</td><td><code>false</code></td></tr> * * <tr><td><code>{@value org.gradle.api.Task#TASK_DEPENDS_ON}</code></td><td>The dependencies of the task. See <a * href="../Task.html#dependencies">here</a> for more details.</td><td><code>[]</code></td></tr> * * <tr><td><code>{@value org.gradle.api.Task#TASK_GROUP}</code></td><td>The group of the task.</td><td><code>null * </code></td></tr> * * <tr><td><code>{@value org.gradle.api.Task#TASK_DESCRIPTION}</code></td><td>The description of the task.</td><td> * <code>null</code></td></tr> * * </table> * * <p>After the task is added, it is made available as a property of the project, so that you can reference the task * by name in your build file. See <a href="../Project.html#properties">here</a> for more details.</p> * * <p>If a task with the given name already exists in this container and the <code>{@value org.gradle.api.Task#TASK_OVERWRITE}</code> * option is not set to true, an exception is thrown.</p> * * @param options The task creation options. * @return The newly created task object * @throws InvalidUserDataException If a task with the given name already exists in this project. */ Task create(Map<String, ?> options) throws InvalidUserDataException; /** * <p>Creates a {@link Task} adds it to this container. A map of creation options can be passed to this method to * control how the task is created. See {@link #create(java.util.Map)} for the list of options available. The given * closure is used to configure the task before it is returned by this method.</p> * * <p>After the task is added, it is made available as a property of the project, so that you can reference the task * by name in your build file. See <a href="../Project.html#properties">here</a> for more details.</p> * * @param options The task creation options. * @param configureClosure The closure to use to configure the task. * @return The newly created task object * @throws InvalidUserDataException If a task with the given name already exists in this project. */ Task create(Map<String, ?> options, Closure configureClosure) throws InvalidUserDataException; /** * <p>Creates a {@link Task} with the given name adds it to this container. The given closure is used to configure * the task before it is returned by this method.</p> * * <p>After the task is added, it is made available as a property of the project, so that you can reference the task * by name in your build file. See <a href="../Project.html#properties">here</a> for more details.</p> * * @param name The name of the task to be created * @param configureClosure The closure to use to configure the task. * @return The newly created task object * @throws InvalidUserDataException If a task with the given name already exists in this project. */ Task create(String name, Closure configureClosure) throws InvalidUserDataException; /** * <p>Creates a {@link Task} with the given name and adds it to this container.</p> * * <p>After the task is added, it is made available as a property of the project, so that you can reference the task * by name in your build file. See <a href="../Project.html#properties">here</a> for more details.</p> * * @param name The name of the task to be created * @return The newly created task object * @throws InvalidUserDataException If a task with the given name already exists in this project. */ Task create(String name) throws InvalidUserDataException; /** * <p>Creates a {@link Task} with the given name and type, and adds it to this container.</p> * * <p>After the task is added, it is made available as a property of the project, so that you can reference the task * by name in your build file. See <a href="../Project.html#properties">here</a> for more details.</p> * * @param name The name of the task to be created. * @param type The type of task to create. * @return The newly created task object * @throws InvalidUserDataException If a task with the given name already exists in this project. */ <T extends Task> T create(String name, Class<T> type) throws InvalidUserDataException; /** * <p>Creates a {@link Task} with the given name and type, configures it with the given action, and adds it to this container.</p> * * <p>After the task is added, it is made available as a property of the project, so that you can reference the task * by name in your build file. See <a href="../Project.html#properties">here</a> for more details.</p> * * @param name The name of the task to be created. * @param type The type of task to create. * @param configuration The action to configure the task with. * @return The newly created task object. * @throws InvalidUserDataException If a task with the given name already exists in this project. */ <T extends Task> T create(String name, Class<T> type, Action<? super T> configuration) throws InvalidUserDataException; /** * <p>Creates a {@link Task} with the given name and adds it to this container, replacing any existing task with the * same name.</p> * * <p>After the task is added, it is made available as a property of the project, so that you can reference the task * by name in your build file. See <a href="../Project.html#properties">here</a> for more details.</p> * * @param name The name of the task to be created * @return The newly created task object */ Task replace(String name); /** * <p>Creates a {@link Task} with the given name and type, and adds it to this container, replacing any existing * task of the same name.</p> * * <p>After the task is added, it is made available as a property of the project, so that you can reference the task * by name in your build file. See <a href="../Project.html#properties">here</a> for more details.</p> * * @param name The name of the task to be created. * @param type The type of task to create. * @return The newly created task object */ <T extends Task> T replace(String name, Class<T> type); }