A major evolution of parent tasks, "component tasks" should implement a composite design pattern, mixed with builders, allowing task implementations to require much less code, and allow task builder instances to take advantage of Java 8 Lambdas/Functions/Streams.
A component task builder should promote a modern fluent and reusable/extendable task design, and support the following functionality:
- name builders, some tasks need to define task name only at build/run time
- skip policies, allowing tasks to easily specify one (or more) use cases which indicate when the task should be skipped (e.g. property X is set, no subsystem Y configs
- before and after run, sort of event listeners invoked right before and after task run is done, a much needed functionality for composite tasks which have all logic delegated to subtasks
- runnable builder, built only when component task is built, and either providing the task run logic (leaf tasks) or the subtasks (composite)
All existent task designs should be deprecated and replaced by component tasks, but the replacement of these should be done gradually, due to the amount of effort required.